一个存储过程平时执行正常,刚才执行出ORA-06508错误。百思不得其解,好像没有什么不正常的地方啊!
后来找到了答案。
重现这个错误如下:执行一个存储过程,其运行时间比较长。刚开始运行时,所有的被依赖对象当然都是VALID的,不然会无法运行。在其运行过程中,被依赖的某对象变为INVALID的了,当程序运行到与INVALID状态对象有关语句时,就会抛出ORA-06508异常。
测试代码如下:
create table TEST_TABLE(id number);
create or replace procedure A_T1 as
begin
DBMS_LOCK.sleep(20);
A_T2;
END;
create or replace procedure A_T2 as
begin
delete from TEST_TABLE;
commit;
DBMS_LOCK.sleep(10);
END;
然后在一个会话中EXECUTE A_T1,然后在另一个会话中drop table TEST_TABLE。当第一个会话执行到A_T2时,会抛出ORA-06508异常。
SQL> EXECUTE a_t1;
begin a_t1; end;
ORA-04068: existing state of packages has been discarded
ORA-04064: not executed, invalidated procedure "MYUSER.A_T2"
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at "MYUSER.A_T1", line 4
ORA-06512: at line 2
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9844649/viewspace-580070/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9844649/viewspace-580070/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)