En nuestro SVN-repositorio de código, me encontré con una especificación de paquete que -después eliminar algunas líneas- se reduce a¿Es esto un error en el compilador PL/SQL?
create or replace package tq84 as
return varchar2(10);
end tq84;
/
Me parece que tal especificación no tiene mucho sentido y por lo tanto, no debe compilar en absoluto. Pero tal vez, no veo lo obvio, entonces: ¿es esto realmente un error?
Por completitud causa:
me @ xxx.yyy.zz > select * from v$version;
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production
Editar: se ha sugerido que en la especificación como dado anteriormente return
no es la palabra clave, pero una variable (paquete-). Este no parece ser el caso, sin embargo, ya que el siguiente recoge igualmente bien:
create or replace package tq84 as
return varchar2(10);
return number;
return date;
end tq84;
/
y claramente, el compilador me diga que declaro la misma variable varias veces.
EDIT 2: JOTN es cierto, por supuesto, y return
ES una variable, y además, la compilador no le dice por adelantado, si una variable con el mismo nombre se declaró dos veces o más, en vez , es el entorno de tiempo de ejecución, que lo hace.
Entonces, con esto en mente, es posible compilar algo así como
create or replace package return as
subtype return is varchar2(10);
end return;
/
create or replace package tq84 as
constant constant
return . return := 'return';
function function
return return . return;
end tq84;
/
que parece extraño, al menos a primera vista.
Así que, supongo, no es un error del compilador porquereturn
se permite como un nombre de variable, pero luego, es discutible si el compilador debe al menos dar una advertencia si una variable con el mismo nombre es declarado varias veces
Acabo de agregar cómo activar las advertencias. – JOTN
No es un error ... es una característica;) – guigui42