Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL-Spaltenname gleich PL/SQL-Variablenname - Wie kann dies in einer Select-Anweisung erfolgen?

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.