sql >> Base de Datos >  >> RDS >> Oracle

El nombre de la columna SQL es el mismo que el nombre de la variable PL/SQL:¿cómo se puede hacer esto en una declaración de selección?

Puede hacerlo si es lo suficientemente liberal con su definición de "sin necesidad de cambiar los nombres de las variables" . Leyendo la fabulosa resolución de nombres PL/SQL dice:

Si se declara un identificador en una unidad PL/SQL nombrada, puede calificar su nombre simple (el nombre en su declaración) con el nombre de la unidad (bloque, subprograma o paquete), utilizando esta sintaxis:

unit_name.simple_identifier_name

El siguiente ejemplo imprimirá 20 como se esperaba:

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

Los nombres de las variables no se modifican. En cambio, son hmm ... más calificados :)

Tenga en cuenta que lo siguiente no funciona:

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

Como el a no calificado en el select -la declaración se interpreta como una columna debido a las reglas de precedencia:

Si una instrucción SQL hace referencia a un nombre que pertenece tanto a una columna como a una variable local o un parámetro formal, entonces el nombre de la columna tiene prioridad.