Dat kan als je liberaal genoeg bent met je definitie van "zonder de variabelenamen te hoeven veranderen" . Het lezen van de fantastische PL/SQL-naamresolutie zegt:
Als een identifier wordt gedeclareerd in een benoemde PL/SQL-eenheid, kunt u zijn eenvoudige naam (de naam in zijn declaratie) kwalificeren met de naam van de eenheid (blok, subprogramma of pakket), met behulp van deze syntaxis:
unit_name.simple_identifier_name
In het volgende voorbeeld wordt 20
. afgedrukt zoals verwacht:
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;
/
Variabelenamen worden niet gewijzigd. In plaats daarvan zijn ze hmm ... meer gekwalificeerd :)
Merk op dat het volgende niet werkt:
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;
/
Als de niet-gekwalificeerde a
in de select
-statement wordt geïnterpreteerd als een kolom vanwege de voorrangsregels:
Als een SQL-instructie verwijst naar een naam die zowel bij een kolom als bij een lokale variabele of formele parameter hoort, heeft de kolomnaam voorrang.