.............
    when others then
      ps_errors := sqlerrm;
      dbms_output.put_line(ps_errors );
END;

解决方案 »

  1.   

    when others then
    可以扑获所有异常,用sqlerrm得到错误信息
    如果将错误信息保存在表中,则不必考虑什么别的,过后查看记录就可以了。
    如果按照:jlandzpa(欧高黎嘉陈)的说法,用dbms_output.put_line(sqlerrm);在sqlplus中运行时,要设环境变量:set serveroutput on后才能看到put_line的结果。
      

  2.   

    而且put_line的字节数是有限制的,如果错误多的话,最好将其写在数据库中。
      

  3.   

    qiuyang_wang(小数点) 回答问题真是详细,呵呵,
    我也给你一个例子:
      v_errcode log_tab.code%type;
      v_errtext log_tab.message%type;
    begin
       ...
       when others then 
         v_errcode:=sqlcode;
         v_errtext:=substr(sqlerrm,1,254);
         insert into log_tab(code,message,info)
         values(v_errcode,v_errtext,'oracle error occurred');
    end;
      

  4.   

    to jiezhi(相逢何必曾相识) :
    sqlcode好象不可以使用
      

  5.   

    sqlcode是个内置函数
    另外:DBMS_UTILITY.FORMAT_ERROR_STACK函数也可以返回当前错误信息。
      

  6.   

    可以自己定义异常,
    也可以使用OTHERS。
      

  7.   

    Insert error usually 2 kinds : Unique Constrains Error , THe PK you inserted already presending in table , Insertion failed Storage extension error , there is no more place in tablespace to store your new records .