oracle – 这是PL / SQL编译器中的错误?
发布时间:2020-12-12 13:48:24 所属栏目:百科 来源:网络整理
导读:在我们的SVN代码存储库中,我遇到了一个包后缀 删除几行 – 归结到 create or replace package tq84 as return varchar2(10);end tq84;/ 在我看来,这样的规范并没有很大的意义,因此 不应该编译.但也许,我看不到明显的,所以:这真的是一个bug吗? 为了完成这个
在我们的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是对的,当然,返回是一个变量,而且 所以,考虑到这一点,可以编译类似的东西 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; / 这看起来很奇怪,至少在一见钟情. 那么我猜测,这不是一个编译器错误,因为返回被允许作为一个变量名,但是如果编译器应该多次声明具有相同名称的变量,至少应该给出警告. 显然它允许您使用名称“return”作为变量.在这种情况下,它声明一个包变量.我会想到这会失败,因为它是一个关键字,但我尝试了它,它的工作.尝试这段代码: create or replace package tq84 as return varchar2(10); somevar varchar2(5); somevar varchar2(5); end tq84; / set serveroutput on BEGIN tq84.return:='Test'; dbms_output.put_line(tq84.return); END; / 这显示返回为一个变量,它允许另一个名称的相同变量被多次声明. 现在,如果你尝试访问一些,那么你得到这个: PLS-00371: at most one declaration for 'TQ84.SOMEVAR' is permitted 显然,由于某种原因延误了这种检查. 我刚刚发现如何在编译时检测出这些问题.加这个: alter session set plsql_warnings = 'enable:all'; 上面的代码编译这些警告: LINE/COL ERROR -------- ----------------------------------------------------------------- 1/1 PLW-05018: unit TQ84 omitted optional AUTHID clause; default value DEFINER used 2/3 PLW-06010: keyword "RETURN" used as a defined name 4/3 PLW-05001: previous use of 'SOMEVAR' (at line 3) conflicts with this use (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |