• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

加班费的离开

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

存储过程出现ORA-06508错误的解决办法

一个存储过程平时执行正常,刚才执行出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 
详细出处参考:http://www.ftnanke.com 

posted on 2012-08-10 16:44  加班费的离开  阅读(2780)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3