gpt4 book ai didi

oracle - 无法引发应用程序错误消息

转载 作者:行者123 更新时间:2023-12-02 04:43:48 28 4
gpt4 key购买 nike

出于调试目的,我需要根据给定标志引发应用程序级别消息。这是异常代码

  EXCEPTION
WHEN dml_errors THEN
l_errors := SQL%BULK_EXCEPTIONS.COUNT;
S_Publish('I', 'Number of statements that failed: ' || l_errors);
FOR i IN 1..l_errors LOOP
S_Publish('I', 'Error #' || TO_CHAR(i) || ' occurred during '|| 'iteration #' || SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
S_Publish('I', 'Error message is ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE));
S_Publish('I', 'Failing Record ID is ' || sap_tbl_ins(SQL%BULK_EXCEPTIONS(i).ERROR_INDEX).DEVICE_PIN);
END LOOP;
IF g_app_error_flag THEN
raise_application_error(-20707, 'Fatal Error: Replication script exceptions', TRUE);
END IF;

WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error on record:' || l_zzman);
S_Publish('I', 'SAP_EQUI Update: Failure processing record ' || l_zzman);
S_Publish ('F');
IF g_app_error_flag THEN
raise_application_error(-20708, 'Fatal Error: Replication script exceptions', TRUE);
END IF;

现在给出这段代码,只要 **g_app_error_flag 为 true,raise_application_error 就应该引发一个。然而,在所有情况下(我的意思是在测试环境中,我故意通过在表上添加一些约束来使脚本失败),我看到的只是 DML 错误,即

ORA-01403: no data found 
ORA-06512: at "DBNAME.PRODUCT_COPY_PACKAGE", line 1808
ORA-24381: error(s) in array DML
ORA-06512: at "DBNAME.PRODUCT_COPY_PACKAGE", line 84
ORA-06512: at line 3

你们能建议一下发生了什么吗?

附注:

这里是 S_Publish 的定义。 S_Publish 中没有“加注”。

  PROCEDURE S_Publish (i_type IN VARCHAR2, 
i_msg IN VARCHAR2 DEFAULT NULL) IS
BEGIN

CASE

WHEN i_type = 'G' THEN
IF g_debug_flag
THEN
INSERT INTO logtable (tstamp,line) values (SYSDATE, i_msg);
COMMIT;
g_counter := 0;
END IF;

WHEN i_type = 'F' THEN
g_err_code := SQLCODE;
g_err_msg := TO_CHAR(g_err_code)||' '||SUBSTR(SQLERRM, 1, 100);
INSERT INTO logtable (tstamp,line) values (SYSDATE, g_err_msg);
COMMIT;

WHEN i_type = 'I' THEN
INSERT INTO logtable (tstamp,line) values (SYSDATE, i_msg);
COMMIT;
g_counter := 0;

END CASE;


END S_Publish;

经过一些调试,这就是我到目前为止所想出的。我不知道背后是什么

所以问题是程序在打印错误结束后立即退出,即FOR i IN 1..l_errors LOOP。程序在END LOOP处退出。为什么之后的事情没有被执行?

最佳答案

所以问题出在 S_Publish 中。它所引用的表即 sap_tbl_ins 是基于 0 的。 SQL%BULK_EXCEPTIONS(i).ERROR_INDEX 基本上是失败时的迭代次数。因此,用数字引用基于 0 的索引会引发“数组越界”异常。我刚刚弄清楚并将公式更改为

S_Publish('I', 'Failing Record ID is ' || sap_tbl_ins((SQL%BULK_EXCEPTIONS(i).ERROR_INDEX)-1).DEVICE_PIN);

并且工作正常。

关于oracle - 无法引发应用程序错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098044/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com