我在PL / SQL触发器中引发了一条错误消息,它工作正常,只是它返回的内容超过了我为应用程序指定的错误。除了自定义错误,我还会获得有关错误发生的行和触发器的信息。
例如它会得到
<div id="diagramContainer"> </div>
我真正想要的是:
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
答案 0 :(得分:1)
您可以使用 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适用于在应用程序上显示的自定义消息,但是,我会记录程序中的所有错误。
请看一下: