Oracle中ORA-06508错误解决,触发器调用存储过程

Oracle中ORA-06508错误解决,触发器调用存储过程

by yanleigis, Email:landgis@126.com

 1.触发器如下:

create or replace trigger TIG_CW_ChargeInfo
  after update  on CW_ChargeInfo 
  for each row
 
declare
  SFCW_FORMID CONSTANT integer := 347; --财务表收费FormID
  PrecordsumID integer;
  pid          integer;
  num          integer;
  str          varchar2(1024);

  --获得一个Formid的主键id值

begin
  begin
    delete from tt;
    PrecordsumID := :new.recordsumID;
    insert into tt (text, d) values ('开始,' || PrecordsumID, sysdate);
 
    pid := cwnew_pack.GetPIDbyFormID(SFCW_FORMID, PrecordsumID);
    insert into tt (text) values ('pid=' || pid);
 
    if pid < 1 then
      return;
    end if;
    select count(*)
      into num
      from SF_ChargeInfosub
     where ChargeInfoID = pid;
    insert into tt (text) values ('pid=' || pid || ',num=' || num);
    if num = 0 then
      return;
    end if;
    str := cwnew_pack.updateSF_ChargeInfosub(precordsumid, 0);
    insert into tt
      (text, d)
    values
      ('最后,pid=' || pid || ',num=' || num || ',' || str, sysdate);
  exception
    when others then
      str := '最后,pid=' || pid || ',num=' || num || ',' || '失败:' ||
             sqlcode || ':' || sqlerrm;
      insert into tt (text, d) values (str, sysdate);
  end;

end;
执行cwnew_pack.GetPIDbyFormID(SFCW_FORMID)出现
ORA-06508: PL/SQL: 无法在调用之前找到程序单元的问题

Create or replace package cwnew_pack is

申明如下

type tt_type is table of varchar2(32) INDEX BY BINARY_INTEGER;

  SFCW_FORMID CONSTANT integer := 347; --财务表收费FormID
  --国有土地供应(方案)签报审批单
  GY_FormID CONSTANT integer := 120; --国有土地供应(方案)签报审批单FormID
  --处室填写收费表
  DCW_FormID CONSTANT integer := 480; --处室填写收费表FormID

end;

解决方法:
将上面的声明部分放入包体最上面

现在的解决方法:
    把包头的声明去掉,然后包体中使用这两个变量的存储过程中进行声明。

参考:http://www.fish888.com/Oracle-ORA-06508-t108001

深表感谢

 

有的时候还可以调用成功' 那是因為該procedrue在第一次被調用後,在報ORA-06508的同時,也會對該包進行一次編譯。那之後再次調用的時候就沒有問題了。


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值