gpt4 book ai didi

oracle - 从RAISE_APPLICATION_ERROR中排除其他错误信息

转载 作者:行者123 更新时间:2023-12-03 07:54:14 24 4
gpt4 key购买 nike

我在PL/SQL触发器中引发了一条错误消息,并且除返回的错误多于我为应用程序指定的错误外,它工作正常。除了自定义错误外,我还获得有关发生错误的行和触发器的信息。

例如它将得到

 ORA-20111: There is a custom error here
ORA-06512: at "{schema_name}.{trigger_name}", LINE 2
ORA-04088: error during execution of trigger {schema_name}.{trigger_name}<br>
.Operation canceled.

我真正想要的是:
ORA-20111: There is a custom error here

如何将错误消息中的其他信息删除,然后再返回给我的应用程序?我的测试代码如下...
CREATE OR REPLACE TRIGGER CUSTOM_ERROR
BEFORE INSERT OR UPDATE ON {SCHEMA_NAME}.{TABLE_NAME} FOR EACH ROW
BEGIN
RAISE_APPLICATION_ERROR(-20111, 'There is a custom error here');
END;

最佳答案

您可以使用 RAISE_APPLICATION_ERROR

例如,

SQL> DECLARE
2 custom_err EXCEPTION;
3 PRAGMA EXCEPTION_INIT( custom_err, -20099 );
4 BEGIN
5 raise_application_error( -20099, 'This is a custom error' );
6 EXCEPTION
7 WHEN custom_err THEN
8 dbms_output.put_line( sqlerrm );
9 END;
10 /
ORA-20099: This is a custom error

PL/SQL procedure successfully completed.

SQL>
PRAGMA EXCEPTION_INIT用于提供自定义错误号,其范围可以从 -20001 -20999

但是,您需要注意避免引发 已经定义的异常

例如,
SQL> DECLARE
2 custom_err EXCEPTION;
3 PRAGMA EXCEPTION_INIT( custom_err, -20099 );
4 v number;
5 BEGIN
6 SELECT empno INTO v FROM emp WHERE empno = 1234;
7 raise_application_error( -20099, 'This is a custom error' );
8 EXCEPTION
9 WHEN custom_err THEN
10 dbms_output.put_line( sqlerrm );
11 END;
12 /
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 6


SQL>

引发 NO_DATA_FOUND 异​​常。您可以抑制这种情况,但是,它将在错误堆栈中留下其他消息。
SQL> DECLARE
2 custom_err EXCEPTION;
3 PRAGMA EXCEPTION_INIT( custom_err, -20099 );
4 v number;
5 BEGIN
6 SELECT empno INTO v FROM emp WHERE empno = 1234;
7 raise_application_error( -20099, 'This is a custom error' );
8 EXCEPTION
9 WHEN no_data_found THEN
10 raise_application_error( -20099, 'This is a custom error' );
11 WHEN custom_err THEN
12 dbms_output.put_line( sqlerrm );
13 END;
14 /
DECLARE
*
ERROR at line 1:
ORA-20099: This is a custom error
ORA-06512: at line 10


SQL>

我总是想尽可能详细地记录错误。 raise_application_error适合在应用程序上显示自定义消息,但是,我会将所有错误记录在程序中。

请看一下:
  • dbms_utility.format_error_stack
  • dbms_utility.format_error_backtrace
  • 关于oracle - 从RAISE_APPLICATION_ERROR中排除其他错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30390529/

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