Det kan du, hvis du er liberal nok til din definition af "uden behov for at ændre variabelnavnene" . Når du læser den fantastiske PL/SQL-navneopløsning, står der:
Hvis en identifikator er erklæret i en navngivet PL/SQL-enhed, kan du kvalificere dens simple navn (navnet i dens erklæring) med navnet på enheden (blok, underprogram eller pakke) ved hjælp af denne syntaks:
unit_name.simple_identifier_name
Følgende eksempel vil udskrive 20
som forventet:
create table foo (a number, b number);
insert into foo values(1, 10);
insert into foo values(2, 20);
insert into foo values(3, 30);
begin
<<bar>>
declare
a number;
b number;
begin
a := 2;
select b into bar.b from foo where a = bar.a;
dbms_output.put_line(b);
end;
end;
/
Variablenavne ændres ikke. I stedet er de hmm ... mere kvalificerede :)
Bemærk, at følgende ikke virker:
begin
declare
a number;
b number;
begin
a := 2;
select foo.b into b from foo where foo.a = a;
dbms_output.put_line(b);
end;
end;
/
Som den ikke-kvalificerede a
i select
-sætning fortolkes som en kolonne på grund af forrangsreglerne:
Hvis en SQL-sætning refererer til et navn, der tilhører både en kolonne og enten en lokal variabel eller formel parameter, så har kolonnenavnet forrang.