Du kan om du är liberal nog med din definition av "utan att behöva ändra variabelnamnen" . När du läser den fantastiska PL/SQL-namnupplösningen står det:
Om en identifierare deklareras i en namngiven PL/SQL-enhet kan du kvalificera dess enkla namn (namnet i dess deklaration) med namnet på enheten (block, underprogram eller paket), med denna syntax:
unit_name.simple_identifier_name
Följande exempel kommer att skriva ut 20
som förväntat:
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;
/
Variabelnamn ändras inte. Istället är de hmm ... mer kvalificerade :)
Observera att följande inte fungerar:
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 icke-kvalificerade a
i select
-påstående tolkas som en kolumn på grund av prioritetsreglerna:
Om en SQL-sats refererar till ett namn som tillhör både en kolumn och antingen en lokal variabel eller formell parameter, har kolumnnamnet företräde.