Sie können, wenn Sie Ihre Definition von "ohne die Notwendigkeit, die Variablennamen zu ändern" großzügig genug sind . Beim Lesen der fabelhaften PL/SQL-Namensauflösung heißt es:
Wenn ein Bezeichner in einer benannten PL/SQL-Unit deklariert ist, können Sie seinen einfachen Namen (den Namen in seiner Deklaration) mit dem Namen der Unit (Block, Unterprogramm oder Paket) qualifizieren, indem Sie diese Syntax verwenden:
unit_name.simple_identifier_name
Das folgende Beispiel gibt 20
aus wie erwartet:
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;
/
Variablennamen werden nicht geändert. Stattdessen sind sie hmm ... qualifizierter :)
Beachten Sie, dass Folgendes nicht funktioniert:
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 nicht qualifizierter a
im select
-Anweisung wird aufgrund der Vorrangregeln als Spalte interpretiert:
Wenn eine SQL-Anweisung auf einen Namen verweist, der sowohl zu einer Spalte als auch zu einer lokalen Variablen oder einem formalen Parameter gehört, dann hat der Spaltenname Vorrang.