Oracle
 sql >> Base de données >  >> RDS >> Oracle

Nom de colonne SQL identique au nom de variable PL/SQL - Comment cela peut-il être fait dans une instruction select ?

Vous pouvez si vous êtes assez libéral dans votre définition de "sans avoir besoin de changer les noms de variables" . La lecture de la fabuleuse résolution de noms PL/SQL indique :

Si un identifiant est déclaré dans une unité PL/SQL nommée, vous pouvez qualifier son nom simple (le nom dans sa déclaration) avec le nom de l'unité (bloc, sous-programme ou package), en utilisant cette syntaxe :

unit_name.simple_identifier_name

L'exemple suivant imprimera 20 comme prévu :

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

Les noms de variables ne sont pas modifiés. Au lieu de cela, ils sont hmm ... plus qualifiés :)

Notez que ce qui suit ne fonctionne pas :

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

En tant que a non qualifié dans le select -statement est interprété comme une colonne en raison des règles de priorité :

Si une instruction SQL fait référence à un nom qui appartient à la fois à une colonne et à une variable locale ou à un paramètre formel, le nom de la colonne est prioritaire.