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

Nome della colonna SQL uguale al nome della variabile PL/SQL - Come è possibile farlo in un'istruzione select?

Puoi, se sei abbastanza liberale della tua definizione di "senza la necessità di cambiare i nomi delle variabili" . La lettura della favolosa risoluzione dei nomi PL/SQL dice:

Se un identificatore è dichiarato in un'unità PL/SQL denominata, è possibile qualificare il suo nome semplice (il nome nella sua dichiarazione) con il nome dell'unità (blocco, sottoprogramma o pacchetto), utilizzando questa sintassi:

unit_name.simple_identifier_name

L'esempio seguente stamperà 20 come previsto:

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

I nomi delle variabili non vengono modificati. Invece sono hmm... più qualificati :)

Nota quanto segue non funziona:

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

Come il a non qualificato nel select -istruzione viene interpretata come una colonna a causa delle regole di precedenza:

Se un'istruzione SQL fa riferimento a un nome che appartiene sia a una colonna che a una variabile locale oa un parametro formale, il nome della colonna ha la precedenza.