create or replace procedure SP_Del_Test
(P_ItemAdmin in mfitem.itemadmin%type, --ItemAdmin
 P_ItemCd    in mfitem.itemcd%type, --ItemCode
 P_Return    out number --输出参数
 ) is
  exp exception;
 
 PRAGMA Exception_Init(exp, -2292);

begin
  delete from mfitem t
   where t.itemcd = P_ItemCd
     and t.itemadmin = P_ItemAdmin;  --这一句会引发-2292异常,有级连删除异常
EXCEPTION
  WHEN EXP THEN
    P_Return := 9;
    ROLLBACK;
  WHEN OTHERS THEN
    ROLLBACK;
end SP_Del_Test;  大家说下,这红色部分,是什么意思哦?我一直没这样用过,不是很明白呢。

解决方案 »

  1.   

    ---参考具体的用法
    PRAGMA EXCEPTION_INIT的用法
    如果要处理未命名的内部异常,必须使用OTHERS异常处理器或PRAGMA EXCEPTION_INIT 。PRAGMA由编译器控制,或者是对于编译器的注释。PRAGMA在编译时处理,而不是在运行时处理。EXCEPTION_INIT告诉编译器将异常名与ORACLE错误码结合起来,这样可以通过名字引用任意的内部异常,并且可以通过名字为异常编写一适当的异常处理器。
      
      在子程序中使用EXCEPTION_INIT的语法如下:
      PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);
    在该语法中,异常名是声明的异常,下例是其用法:
      DECLARE
      deadlock_detected EXCEPTION;
      PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
      BEGIN
      ... -- Some operation that causes an ORA-00060 error
      EXCEPTION
      WHEN deadlock_detected THEN
      -- handle the error
      END;
      

  2.   

    create or replace procedure SP_Del_Test
    (P_ItemAdmin in mfitem.itemadmin%type, --ItemAdmin
     P_ItemCd in mfitem.itemcd%type, --ItemCode
     P_Return out number --输出参数
     ) is
      exp exception;PRAGMA Exception_Init(exp, -2292);begin
      delete from mfitem t
      where t.itemcd = P_ItemCd
      and t.itemadmin = P_ItemAdmin; --这一句会引发-2292异常,有级连删除异常
    EXCEPTION
      WHEN EXP THEN
      P_Return := 9;
      ROLLBACK;
      WHEN OTHERS THEN
      ROLLBACK;
    end SP_Del_Test;--看红色部分,其实就是定义了一个异常而已,只不过这个定义异常稍微有点特殊,具体看楼上解释,
    然后捕捉到这个异常,使之可以和oracle的error number进行绑定!
      

  3.   

    那红色部分PRAGMA Exception_Init(exp, -2292);这个-2292 是不是oracle系统定义的错误代码呀?我在什么地方能查看到这些错误代码的含义哦?
      

  4.   

    -2292是ORACLE自定义的错误代码,但是错误代码一般都是5位数字的,所以你查的时候,需要查
    ORA-02292,百度,Google都能查到。
    但是我这里有一个chm的手册,比较好用,邮箱告诉我吧,可以发给你。
      

  5.   

    好呀,我的qq邮箱是[email protected]