在我们的SVN代码存储库中,我遇到了一个包后缀
删除几行 – 归结到
create or replace package tq84 as
return varchar2(10);
end tq84;
/
在我看来,这样的规范并没有很大的意义,因此
不应该编译.但也许,我看不到明显的,所以:这真的是一个bug吗?
为了完成这个目的:
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是对的,当然,返回是一个变量,而且
如果具有相同名称的变量被声明为两次或更多,则编译器不会提前告知,而是运行时环境.
所以,考虑到这一点,可以编译类似的东西
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;
/
这看起来很奇怪,至少在一见钟情.
那么我猜测,这不是一个编译器错误,因为返回被允许作为一个变量名,但是如果编译器应该多次声明具有相同名称的变量,至少应该给出警告.