我先在只能够通过这种形式捕获。
begin
    RAISE_APPLICATION_ERROR(-20999,'APPLICATION_ERROR');
EXCEPTION
    WHEN OTHERS THEN
    IF SQLCODE = -20999 THEN
        DBMS_OUTPUT.put_line( SQLERRM  );
    END IF;
end;

解决方案 »

  1.   

    我希望可以单独写个when,和when others分开。EXCEPTION
        WHEN XXXX THEN
        -- do some work
    end;
      

  2.   

    begin
      errflag := 1;
        ……
    errflag := 2;
       ……
    errflag := 3;
       ……
    errflag := 4;
       ……errflag := 5;
       ……
        RAISE_APPLICATION_ERROR(-20999,'APPLICATION_ERROR');
    EXCEPTION
       WHEN OTHERS THEN
        IF errflag = 1 THEN
           RETURN - 1; --插数据出错-1
        IF errflag = 2 THEN
          RETURN - 2; --取数据出错-2
        IF errflag = 3 THEN
          RETURN - 3; --游标出错-3
       IF errflag = 4 THEN
          RETURN - 4; --对XX表操作-4   IF errflag = 5 THEN
          RETURN - 5; --其他出错-5
        END IF;end;
      

  3.   

    不能使用用户自定义exception吗?
      

  4.   

    我用RAISE_APPLICATION_ERROR就像抱出错信息。大概有三个地方。每个地方内容不同。自定义的EXCEPTION也可以,但我嫌麻烦~~~~~~~~~