「変数名を変更する必要なしに」の定義を十分に自由に理解できれば可能です。 。すばらしいPL/SQLの名前解決を読むと次のようになります。
名前付きPL/SQLユニットで識別子が宣言されている場合は、次の構文を使用して、その単純な名前(宣言内の名前)をユニットの名前(ブロック、サブプログラム、またはパッケージ)で修飾できます。
unit_name.simple_identifier_name
次の例では、20
を出力します 予想通り:
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;
/
変数名は変更されません。代わりに、彼らはうーん...もっと資格があります:)
以下は機能しないことに注意してください:
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;
/
修飾されていないa
として select
で -優先順位の規則により、ステートメントは列として解釈されます:
SQLステートメントが、列とローカル変数または仮パラメーターの両方に属する名前を参照している場合は、列名が優先されます。