Puoi, se sei abbastanza liberale della tua definizione di "senza la necessità di cambiare i nomi delle variabili" . La lettura della favolosa risoluzione dei nomi PL/SQL dice:
Se un identificatore è dichiarato in un'unità PL/SQL denominata, è possibile qualificare il suo nome semplice (il nome nella sua dichiarazione) con il nome dell'unità (blocco, sottoprogramma o pacchetto), utilizzando questa sintassi:
unit_name.simple_identifier_name
L'esempio seguente stamperà 20
come previsto:
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;
/
I nomi delle variabili non vengono modificati. Invece sono hmm... più qualificati :)
Nota quanto segue non funziona:
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;
/
Come il a
non qualificato nel select
-istruzione viene interpretata come una colonna a causa delle regole di precedenza:
Se un'istruzione SQL fa riferimento a un nome che appartiene sia a una colonna che a una variabile locale oa un parametro formale, il nome della colonna ha la precedenza.