在《解决Diana Nodes限制一例》一文中,我在文章末尾提到----"这里我猜是PL/SQL Developer自身的问题,也就是说PL/SQL Developer还是沿用了
当时我以为我找到了问题的真相,其实还差的远!这里根本就不是PL/SQL Developer的问题。
我们来看一下问题的真相是什么:
这里PL/SQL Developer在编译PCK_SAL_VFY_BATCH_RELEASE这个package body的时候为什么会报错"PLS-123 Program too large(Diana Nodes)"是因为Bug 5936020,这个bug在
具体来说是这样:
PL/SQL Developer默认在编译的时候是会带上debug选项的,也就是说PL/SQL Developer默认在编译package body的时候实际上是相当于执行了alter package packagename compile debug body,这个时候如果你的数据库的版本是
解决方法有三个:
1、使用我在《解决Diana Nodes限制一例》中提到的不带debug选项的方式编译,但用这种方式的缺陷在于编译好的package body不能debug进去了,这个对于开发人员来说通常是不可接受的:
SQL> conn ipra/acca@ipradev;
Connected to Oracle Database
Connected as ipra
SQL> alter package PCK_SAL_VFY_BATCH_RELEASE compile debug body;
Warning: Package body altered with compilation errors
SQL> select text from sys.all_errors where name='PCK_SAL_VFY_BATCH_RELEASE';
TEXT
--------------------------------------------------------------------------------
PLS-00123: program too large (Diana nodes)
SQL> alter package PCK_SAL_VFY_BATCH_RELEASE compile body;
Package body altered
SQL> select text from sys.all_errors where name='PCK_SAL_VFY_BATCH_RELEASE';
TEXT
--------------------------------------------------------------------------------
SQL> select debuginfo,object_name,object_type from sys.all_probe_objects where object_name='PCK_SAL_VFY_BATCH_RELEASE';
DEBUGINFO OBJECT_NAME OBJECT_TYPE
--------- ------------------------------ -------------------
F PCK_SAL_VFY_BATCH_RELEASE PACKAGE BODY
F PCK_SAL_VFY_BATCH_RELEASE PACKAGE
2、升级数据库到
如果是
SQL> conn caipra/acca@ipratest;
Connected to Oracle Database
Connected as caipra
SQL> alter package PCK_SAL_VFY_BATCH_RELEASE compile debug body;
Package body altered
SQL> select text from sys.all_errors where name='PCK_SAL_VFY_BATCH_RELEASE';
TEXT
--------------------------------------------------------------------------------
SQL> select debuginfo,object_name,object_type from sys.all_probe_objects where object_name='PCK_SAL_VFY_BATCH_RELEASE';
DEBUGINFO OBJECT_NAME OBJECT_TYPE
--------- ------------------------------ -------------------
T PCK_SAL_VFY_BATCH_RELEASE PACKAGE BODY
T PCK_SAL_VFY_BATCH_RELEASE PACKAGE
SQL> alter package PCK_SAL_VFY_BATCH_RELEASE compile body;
Package body altered
SQL> select debuginfo,object_name,object_type from sys.all_probe_objects where object_name='PCK_SAL_VFY_BATCH_RELEASE';
DEBUGINFO OBJECT_NAME OBJECT_TYPE
--------- ------------------------------ -------------------
F PCK_SAL_VFY_BATCH_RELEASE PACKAGE BODY
T PCK_SAL_VFY_BATCH_RELEASE PACKAGE
Leave a comment