Puede hacerlo si es lo suficientemente liberal con su definición de "sin necesidad de cambiar los nombres de las variables" . Leyendo la fabulosa resolución de nombres PL/SQL dice:
Si se declara un identificador en una unidad PL/SQL nombrada, puede calificar su nombre simple (el nombre en su declaración) con el nombre de la unidad (bloque, subprograma o paquete), utilizando esta sintaxis:
unit_name.simple_identifier_name
El siguiente ejemplo imprimirá 20
como se esperaba:
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;
/
Los nombres de las variables no se modifican. En cambio, son hmm ... más calificados :)
Tenga en cuenta que lo siguiente no funciona:
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;
/
Como el a
no calificado en el select
-la declaración se interpreta como una columna debido a las reglas de precedencia:
Si una instrucción SQL hace referencia a un nombre que pertenece tanto a una columna como a una variable local o un parámetro formal, entonces el nombre de la columna tiene prioridad.