2016-12-05 16 views

答えて

0

プラグマexception_initは、例外ハンドラでその名前で例外を参照できるように、例外に名前を付けるために使用されます。数千のOracle例外のほんの一部には、あらかじめ定義された名前があります。 exception_initを使用して、これらの例外の名前を作成できます。

は、私がここにフォーマットされたテキストを挿入することができますので、私は私の以前の回答を編集していますhttps://docs.oracle.com/cd/B19306_01/appdev.102/b14261/errors.htm#BABGIIBI

を参照してください。 あなたの例では、投げている例外を定義していますが、システムが投げているが名前は付けられていない既存の例外を捕まえたいのですが?次の例では、2つの特定のエラー「DATA_NOT_FOUND」とシステム・エラーであるORA-600を処理します(これらを取得するコードがあります)。 EX用

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 を作成するか、または置き換えるI番号:= 1; i_greater_than_zero例外。 プラグマ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値がゼロより大きい:'); end;上記の例では、たとえプラグマを持っていなくても同じ仕事をしています。プラグマの意義は何ですか? –

+0

ありがとう、ブライアン。私は理解した。 –

関連する問題