我不知道它是否奇怪,但是在第一次遇到 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
表。
答案 0 :(得分:0)
我得到了答案,这是我无法识别的愚蠢错误,变量SQL_ERROR_M
的长度小于错误信息本身。
感谢社区。 p>