你可以使用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
而你的代碼看起來像?我沒有看到你發佈的任何代碼。你如何處理例外情況? –
@LalitKumarB沒有處理。爲您調整了代碼。我希望用戶從應用程序中看到這個錯誤。它只是顯示它從Oracle收到的錯誤。我希望這個錯誤完全是我放入RAISE_APPLICATION_ERROR的東西,而不是更多 – user1567453
但是這不會引起已定義的異常並且只有用戶定義的異常。 –