sql >> Database >  >> RDS >> Oracle

Naam SQL-kolom gelijk aan PL/SQL-variabelenaam - Hoe kan dit in een select-statement?

Dat kan als je liberaal genoeg bent met je definitie van "zonder de variabelenamen te hoeven veranderen" . Het lezen van de fantastische PL/SQL-naamresolutie zegt:

Als een identifier wordt gedeclareerd in een benoemde PL/SQL-eenheid, kunt u zijn eenvoudige naam (de naam in zijn declaratie) kwalificeren met de naam van de eenheid (blok, subprogramma of pakket), met behulp van deze syntaxis:

unit_name.simple_identifier_name

In het volgende voorbeeld wordt 20 . afgedrukt zoals verwacht:

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;
/

Variabelenamen worden niet gewijzigd. In plaats daarvan zijn ze hmm ... meer gekwalificeerd :)

Merk op dat het volgende niet werkt:

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 de niet-gekwalificeerde a in de select -statement wordt geïnterpreteerd als een kolom vanwege de voorrangsregels:

Als een SQL-instructie verwijst naar een naam die zowel bij een kolom als bij een lokale variabele of formele parameter hoort, heeft de kolomnaam voorrang.



  1. Gegevens filteren met de JDBC RowSet

  2. Native Library sqljdbc_auth.dll al geladen in een andere classloader

  3. Hoe installeer ik libpq-fe.h?

  4. NA LOGON (Oracle) trigger in PostgreSQL met extensie – login_hook