2016-12-05 1 views

ответ

0

pragma exception_init используется для предоставления имени исключения, чтобы вы могли ссылаться на исключение на это имя в обработчике исключений. Только несколько из нескольких тысяч исключений Oracle имеют предопределенные имена. Вы можете использовать exception_init для создания имен для этих других исключений.

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

я редактирую мой предыдущий ответ, потому что я могу вставить форматированный текст здесь. В вашем примере вы определяете исключение, которое вы бросаете, но что, если вы хотите поймать существующее исключение, которое система бросает, но не называется? В следующем примере я обрабатываю две конкретные ошибки: DATA_NOT_FOUND и ORA-600, что является системной ошибкой (и да, у меня есть код, который их получает).

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

напр: создать или заменить процедуру proc_pragma_demo , как я номер: = 1; исключение i_greater_than_zero; pragma exception_init (i_greater_than_zero, -1234); begin if (i> 0) then raise i_greater_than_zero; end if; исключение когда i_greater_than_zero тогда dbms_output.put_line ('i значение больше нуля:'); конец; в приведенном выше примере, даже если у нас нет прагмы, он выполняет ту же работу. Каково значение прагмы? –

+0

Спасибо большое, Брайан. Я понял. –

Смежные вопросы