Vous pouvez si vous êtes assez libéral dans votre définition de "sans avoir besoin de changer les noms de variables" . La lecture de la fabuleuse résolution de noms PL/SQL indique :
Si un identifiant est déclaré dans une unité PL/SQL nommée, vous pouvez qualifier son nom simple (le nom dans sa déclaration) avec le nom de l'unité (bloc, sous-programme ou package), en utilisant cette syntaxe :
unit_name.simple_identifier_name
L'exemple suivant imprimera 20
comme prévu :
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;
/
Les noms de variables ne sont pas modifiés. Au lieu de cela, ils sont hmm ... plus qualifiés :)
Notez que ce qui suit ne fonctionne pas :
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;
/
En tant que a
non qualifié dans le select
-statement est interprété comme une colonne en raison des règles de priorité :
Si une instruction SQL fait référence à un nom qui appartient à la fois à une colonne et à une variable locale ou à un paramètre formel, le nom de la colonne est prioritaire.