错误代码:
ORA-06508
出现场合:
Oracle 10g(Release 10.1.0.2.0)
PL/SQL Developer 6.0
在PL/SQL Developer中Drop掉包,再重新编译上去,那么打开使用此包的存储过程的画面(或者点击画面
上调用了此包中存储过程的按钮)时,出现如下异常:
Nested is: java.sql.SQLException: ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "AA.BBBBBB" has been invalidated
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 1
(AA.BBBB:AA代表DB用户名,BBBB代表包的名称)
此异常只在重新编译后,使用此包的第一次出现,刷新页面便可正常运行。
原因及解决方法:
调查发现包头有如下的声明
TYPE v_Field_Array IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
TYPE CUR_CURSOR_TYPE IS REF CURSOR;
v_field v_Field_Array;
v_shakei_count NUMBER;
前两行定义类型,后两行声明变量。问题就处在后两行上。
这两个变量在包中的多个存储过程中使用,定义在这里使用时,包体中不需要再声明,但是引出了以上的
异常。
为什么在包头中声明变量就出现这种异常,目前原因不明......
现在的解决方法:
把包头的声明去掉,然后包体中使用这两个变量的存储过程中进行声明。
ORA-06508
出现场合:
Oracle 10g(Release 10.1.0.2.0)
PL/SQL Developer 6.0
在PL/SQL Developer中Drop掉包,再重新编译上去,那么打开使用此包的存储过程的画面(或者点击画面
上调用了此包中存储过程的按钮)时,出现如下异常:
Nested is: java.sql.SQLException: ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "AA.BBBBBB" has been invalidated
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at line 1
(AA.BBBB:AA代表DB用户名,BBBB代表包的名称)
此异常只在重新编译后,使用此包的第一次出现,刷新页面便可正常运行。
原因及解决方法:
调查发现包头有如下的声明
TYPE v_Field_Array IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
TYPE CUR_CURSOR_TYPE IS REF CURSOR;
v_field v_Field_Array;
v_shakei_count NUMBER;
前两行定义类型,后两行声明变量。问题就处在后两行上。
这两个变量在包中的多个存储过程中使用,定义在这里使用时,包体中不需要再声明,但是引出了以上的
异常。
为什么在包头中声明变量就出现这种异常,目前原因不明......
现在的解决方法:
把包头的声明去掉,然后包体中使用这两个变量的存储过程中进行声明。