0

我不知道这是否奇怪,但是在第一次遇到SQLERRM之后执行停止/退出。

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

下面是代码

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表格。

4

1 回答 1

0

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

感谢社区。

于 2014-12-26T13:43:42.210 回答