В нашем SVN-репозитории я обнаружил спецификацию пакета, которая после
удаление нескольких строк - сводится к
create or replace package tq84 as
return varchar2(10);
end tq84;
/
Мне кажется, что такая спецификация не имеет большого смысла и поэтому
не должен компилироваться вообще. Но, может быть, я не вижу очевидного, поэтому: действительно ли это ошибка?
Для полноты:
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
Редактировать : предполагается, что в спецификации, как указано выше, return
является не ключевым словом, а (package-) переменной. Однако, похоже, что это не так, поскольку следующее компилируется одинаково хорошо:
create or replace package tq84 as
return varchar2(10);
return number;
return date;
end tq84;
/
и ясно, что компилятор должен сказать мне, что я объявляю одну и ту же переменную несколько раз.
РЕДАКТИРОВАТЬ 2 : JOTN, конечно, прав, и return
IS переменная, и, кроме того,
Компилятор не сообщает заранее, если переменная с тем же именем объявлена дважды или более, вместо этого это среда выполнения.
Итак, имея это в виду, можно скомпилировать что-то вроде
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;
/
, что выглядит странно, по крайней мере, на первый взгляд.
Итак, я думаю, это не ошибка компилятора потому что 1033 * допускается в качестве имени переменной, но потом, это спорно, если компилятор должен по крайней мере дать предупреждение, если переменная с тем же именем объявляется несколько раз.