大体是这样,一个总控调用若干个存储过程,执行总控的时候其中一个存储过程(命名A)报 ORA-06508错误,经排除:只要是有另一个存储过程B 与A 一起调用时就报错。
1.总控里删除B的调用,正常执行
2.单独先执行完B,在执行A,也无异常
疑点:B执行时可能改变了A中的某些元素。但是B有100多行,A有1400行,光靠眼力检查不出来。
请教:如何检查运行时编译错误

解决方案 »

  1.   

    和存储过程的调用顺序有关?记得看过存储过程和函数的前向调用知识,你GOOGLE下,看是否是哪个引起的
      

  2.   


    冲突了 要么在啊A中加个execute immediate 'alter procedure b compile';
      

  3.   

    调用顺序是固定的,B是基础表的数据加工,A是月报,月底跑一次,而且必须在后面。还有人给点意见么,我对后台的东西不是很熟悉,以前是搞前台的,这次工作是把SH脚本改成存储过程执行,第一次完全搞后台。
      

  4.   

    在A中加这个没有效果,因为在调用A的时候就会报“ORA-06508:”错误。
    把这句放在总控调用B后面,执行总控,查看session此语句会卡住,改为编译A不会卡住,但是不解决问题
    经简单测试发现 在一次完整执行过程中 执行过的存储过程可能都不能编译
    懂得Oracle原理太少,只会一点一点的试
      

  5.   

    经过一点点排除发现B中有这么一段脚本
    pro_droptable('fx_coll_acct_cls');
    -----------------------
    execute immediate '
    create  table fx_coll_acct_cls
    as 
    select 
     acct_no
       ,limit_no
    ,ltrim(max(sys_connect_by_path(mt_coll_cls_typ_dscp,'';'')),'';'') as mt_coll_cls_typ_dscp  
    from tmpetl_coll_acct2 
    start with id1=1 connect by prior id2 = id2 -1
    group by acct_no,limit_no order by acct_no,limit_no
    '; 
    发现A中用到了这个表,加以改造以后终于正常了