Możesz, jeśli jesteś wystarczająco liberalny w swojej definicji „bez potrzeby zmiany nazw zmiennych” . Czytanie wspaniałego rozwiązywania nazw PL/SQL mówi:
Jeśli identyfikator jest zadeklarowany w nazwanej jednostce PL/SQL, możesz zakwalifikować jego prostą nazwę (nazwę w deklaracji) nazwą jednostki (bloku, podprogramu lub pakietu), używając następującej składni:
unit_name.simple_identifier_name
Poniższy przykład wyświetli 20
zgodnie z oczekiwaniami:
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;
/
Nazwy zmiennych nie ulegają zmianie. Zamiast tego są hmm ... bardziej wykwalifikowani :)
Pamiętaj, że następujące nie działa:
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;
/
Jako niewykwalifikowany a
w select
-statement jest interpretowany jako kolumna ze względu na zasady pierwszeństwa:
Jeśli instrukcja SQL odwołuje się do nazwy, która należy zarówno do kolumny, jak i do zmiennej lokalnej lub parametru formalnego, wówczas pierwszeństwo ma nazwa kolumny.