2016-12-05 2 views

Antwort

0

pragma exception_init wird verwendet, um einer Ausnahmebedingung einen Namen zu geben, so dass Sie im Exception-Handler auf die Ausnahme mit diesem Namen verweisen können. Nur einige der mehreren tausend Oracle-Ausnahmen haben vordefinierte Namen. Sie können exception_init verwenden, um Namen für diese anderen Ausnahmen zu erstellen.

siehe https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#BABGIIBI

Ich bearbeite meine Antwort, weil ich hier formatierten Text einfügen können. In Ihrem Beispiel definieren Sie eine Ausnahme, die Sie werfen, aber was ist, wenn Sie eine bestehende Ausnahme abfangen wollen, die das System wirft, aber unbenannt ist? Im folgenden Beispiel behandle ich zwei spezifische Fehler 'DATA_NOT_FOUND' und ORA-600, was ein Systemfehler ist (und ja, ich habe einen Code, der diese bekommt).

CREATE OR REPLACE PROCEDURE exception_init_demo 
AS 
    l_routine    VARCHAR2 (30) := $$plsql_unit; 
    severe_system_error EXCEPTION; 
    PRAGMA EXCEPTION_INIT (severe_system_error, -600); 
BEGIN 
    -- Execution code goes here 
    NULL; 
EXCEPTION 
    WHEN severe_system_error 
    THEN 
     -- Severe error, log it, notify the dba, re-raise the exception 
     log_error (
      p_application => $$plsql_unit 
      , p_routine  => l_routine 
      , p_message  => SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace() 
     ); 
     notify_dba; 
     RAISE; 
    WHEN NO_DATA_FOUND 
    THEN 
     -- No data was found, this is OK, ignore error and return 
     return; 
    WHEN OTHERS 
    THEN 
     -- all other errors we will log and re-raise 
     log_error (
      p_application => $$plsql_unit 
      , p_routine  => l_routine 
      , p_message  => SQLERRM || UTL_TCP.crlf || DBMS_UTILITY.format_error_backtrace() 
     ); 
     RAISE; 
END; 
+0

für ex: erstellen oder ersetzen Verfahren proc_pragma_demo als I Nummer: = 1; i_greater_than_zero Ausnahme; pragma exception_init (i_greater_than_zero, -1234); Beginne wenn (i> 0) dann erhöhe i_greater_than_zero; Ende wenn; Ausnahme wenn i_greater_than_zero dann dbms_output.put_line ('i Wert ist größer als Null:'); Ende; Im obigen Beispiel, auch wenn wir das Pragma nicht haben, macht es den gleichen Job. Welche Bedeutung hat Pragma? –

+0

Vielen Dank, Brian. Ich habe verstanden. –

Verwandte Themen