sql >> Database teknologi >  >> RDS >> Oracle

SQL kolonnenavn samme som PL/SQL variabelnavn - Hvordan kan dette gøres i en select-sætning?

Det kan du, hvis du er liberal nok til din definition af "uden behov for at ændre variabelnavnene" . Når du læser den fantastiske PL/SQL-navneopløsning, står der:

Hvis en identifikator er erklæret i en navngivet PL/SQL-enhed, kan du kvalificere dens simple navn (navnet i dens erklæring) med navnet på enheden (blok, underprogram eller pakke) ved hjælp af denne syntaks:

unit_name.simple_identifier_name

Følgende eksempel vil udskrive 20 som forventet:

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

Variablenavne ændres ikke. I stedet er de hmm ... mere kvalificerede :)

Bemærk, at følgende ikke virker:

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

Som den ikke-kvalificerede a i select -sætning fortolkes som en kolonne på grund af forrangsreglerne:

Hvis en SQL-sætning refererer til et navn, der tilhører både en kolonne og enten en lokal variabel eller formel parameter, så har kolonnenavnet forrang.



  1. Sådan får du den aktuelle dato og tid i MySQL

  2. Kend relationer mellem alle tabellerne i databasen i SQL Server

  3. Hvad sker der, hvis du ikke forpligter en transaktion til en database (f.eks. SQL Server)?

  4. Opret beregnet kolonne ved hjælp af data fra en anden tabel