2014-12-26 84 views
0

我不知道它是否奇怪,但执行停止/退出第一次遇到SQLERRMSQLERRM后执行停止

我需要将异常详细信息保存到表中。

下面是代码

CURRENT_P_SECTOR := 20; 
EXCEPTION 
    WHEN OTHERS THEN 
     DBMS_OUTPUT.PUT_LINE('dummy 1111111111'); 
     DBMS_OUTPUT.PUT_LINE('dummy 22222222222'); 

     SQL_CODE := SQLCODE; 

     DBMS_OUTPUT.PUT_LINE('dummy 33333333333'); 

     SQL_ERROR_M := SQLERRM; 

     DBMS_OUTPUT.PUT_LINE('dummy 44444444444'); 

      DBMS_OUTPUT.PUT_LINE('EXCEPTION ::: ' || SQL_CODE); 
      DBMS_OUTPUT.PUT_LINE('DETAILS ARE AS FOLLOWS(At Section: ' || CURRENT_P_SECTOR || ') :-' || CHR(10) || SQL_ERROR_M); 

       INSERT INTO FIMS_OWNER.BATCH_ERROR_T VALUES(
        BATCH_ERROR_T_SEQ.NEXTVAL, 
        'INTERFACE_INBOUND_PKG'/*CHANGE TO PARTICULAR PACKAGE NAME IF USED IN ANY PACKAGE*/, 
        'CES_LOAD_PRJ_PRC'/*PROCEDURE NAME*/, 
        CURRENT_P_SECTOR/*PROGRAM SECTOR TILL WHERE SUCCESSFUL EXECUTION */, 
        SQL_CODE/*ORACLE EXCEPTION CODE*/, 
        'Error Details : ' || CHR(10)|| SQL_ERROR_M/*COMPLETE EXCEPTION DETAILS*/, 
        'EXCEPTION', 
        SYSDATE 
        ); 

而且DBMS OUTPUT我得到的是:

dummy 1111111111 
dummy 22222222222 
dummy 33333333333 

dummy 44444444444和超越,清楚地说,执行SQLERRM后停止。

执行我明确地让它抛出是唯一的约束冲突异常。

[Error] Execution (437: 1): ORA-06502: PL/SQL: numeric or value error: character string buffer too small 
ORA-06512: at "FIMS_OWNER.CORE_LOAD_PO_PRC", line 415 
ORA-00001: unique constraint (FIMS_OWNER.T_PO_LINE_ITEM_PK) violated 
ORA-06512: at line 1 

但是在BATCH_ERROR_T表中没有输入相同的例外情况。

回答

0

我得到了答案,我没有认出这个愚蠢的错误,我的变量SQL_ERROR_M的长度小于错误信息本身。

谢谢社区。

+0

请确保您还添加了一个DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,如[本文](http://www.oracle-developer.net/display.php?id=318)中所述。异常日志应始终包含所有行号。 –