sql >> Databasteknik >  >> RDS >> Oracle

SQL-kolumnnamn samma som PL/SQL-variabelnamn - Hur kan detta göras i en select-sats?

Du kan om du är liberal nog med din definition av "utan att behöva ändra variabelnamnen" . När du läser den fantastiska PL/SQL-namnupplösningen står det:

Om en identifierare deklareras i en namngiven PL/SQL-enhet kan du kvalificera dess enkla namn (namnet i dess deklaration) med namnet på enheten (block, underprogram eller paket), med denna syntax:

unit_name.simple_identifier_name

Följande exempel kommer att skriva ut 20 som förväntat:

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

Variabelnamn ändras inte. Istället är de hmm ... mer kvalificerade :)

Observera att följande inte fungerar:

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 icke-kvalificerade a i select -påstående tolkas som en kolumn på grund av prioritetsreglerna:

Om en SQL-sats refererar till ett namn som tillhör både en kolumn och antingen en lokal variabel eller formell parameter, har kolumnnamnet företräde.



  1. Hur POSITION() fungerar i PostgreSQL

  2. Flera Hibernate-sekvensgeneratorer för en enhet med PostgreSQL

  3. Hur LN() fungerar i MariaDB

  4. Vad är det bästa sättet att implementera Polymorphic Association i SQL Server?