異常な異常のOracle RAISEのRAISEでのOracle

ターン:

RAISEでのOracleの異常

例外は、次の3つの方法でスローされます
  
  1。PL / SQLのランタイム・エンジンによって
  
  2 RAISE文の使用
  
  3.コールRAISE_APPLICATION_ERRORストアドプロシージャを
  
  データベース・エラーまたはPL / SQLが実行時に発生したときに例外が自動的にPL / SQLランタイムエンジンを投げています、。例外は、文RAISEのによってスローされる可能性があり
  RAISEのexception_name;
  
  明示的にプログラマ珍しいイディオム処理文を投げたが、RAISE例外を宣言するために限定されるものではないが、それは任意の任意の例外をスローすることができます。たとえば、あなたは間違ってTIMEOUT_ON_RESOURCEで新しい実行時例外ハンドラを検出したい、あなたは単にあなたのプログラムの中で次の文を使用します。
  TIMEOUT_ON_RESOUCEを上げ、
  
  次のようなオーダーエントリの例では、順序が株式の数がスローされているよりも小さいときにあれば異常、例外、例外処理キャプチャ
  宣言するを
  例外inventory_too_low;
  
  ---他の宣言文を
  BEGIN
  THEN inventory_rec.qty> IFのorder_rec.qtyを
  RAISEのinventory_too_low;
  END IFに
  例外を
  inventory_too_lowがTHEN WHEN
  order_rec.staus:= '入荷待ち';
  END;
  
  RAISE_APPLICATION_ERRORは例外に例外をスローする機能を内蔵しており、エラー番号とエラーメッセージが表示されます。デフォルトのエラー番号のカスタム例外が+1され、デフォルトの情報がUser_Defined_Exceptionです。RAISE_APPLICATION_ERROR機能を実行することができ、異常部分は、特殊な例外を除いて、明示的にスローされたエラー番号名付け、PL / SQLプログラムブロックを呼び出します。RAISE_APPLICATION_ERROR(エラー番号、メッセージ[、真 、偽]))
  
  エラー番号の範囲は-20999に-20000です。エラーメッセージは、最大2048バイトのテキスト文字列です。TRUEおよびFALSE手段スタックエラー(エラー・スタック)に(TRUE)を添加するか、上書き(オーバーライト)エラー・スタック(FALSE)。デフォルトはFALSEです。
  
  次のコードに示すように:
  IFはTHEN product_not_found
  RAISE_APPLICATION_ERROR(-20 123、 'Invald製品コード'、TRUE)は、
  END IF。

-------------------------------------------------- ------------------------------------------------

時に異常スロー後に、例外が処理され、解決されたときに制御ステートメントの次の部分に制御が戻りますが、レイヤー上で実行され、例外が起こった場所に戻ることができないことを意味異常に無条件で制御します。
  BEGIN
  DECLAREの
  、bad_credit例外を
  BEGIN
  ;レイズbad_creditの
  異常、制御通過; -
  EXCEPTION
  bad_credit THEN
  DBMS_OUTPUT.PUT_LINE( 'bad_credit');
  END;
  ポスト--bad_credit例外処理、制御パス
  例外
  OTHERS THEN
  
  -コントロールここbad_creditから異常な移動
  
  - bad_creditのように処理されている
  
  END;
  
  例外が発生すると、例外ハンドラ内のブロックは、制御をいずれかをブロックするために移すか、例外処理部に伝達されません。
  
  BEGIN
  DECLARE ---内部ブロックが開始
  
  bad_credit例外;
  BEGIN
  レイズbad_creditと、
  
  -異常は、操舵制御を発生し;
  EXCEPTION
  WHEN ZERO_DIVIDE THEN -例外bad_credite扱うことができない
  DBMS_OUTPUT.PUT_LINE(「誤差によりゼロ除算」);
  
  -インナーブロックの端END
  
  例外が解決されていないため、ここでは到達できない制御- 、
  
  -異常な一部
  
  の例外
  WHEN OTHERS THEN
  - bad_credit、制御がここに転送されるので、解決しない
  ENDを。

カテゴリー: オラクル

例外は、次の3つの方法でスローされます
  
  1。PL / SQLのランタイム・エンジンによって
  
  2 RAISE文の使用
  
  3.コールRAISE_APPLICATION_ERRORストアドプロシージャを
  
  データベース・エラーまたはPL / SQLが実行時に発生したときに例外が自動的にPL / SQLランタイムエンジンを投げています、。例外は、文RAISEのによってスローされる可能性があり
  RAISEのexception_name;
  
  明示的にプログラマ珍しいイディオム処理文を投げたが、RAISE例外を宣言するために限定されるものではないが、それは任意の任意の例外をスローすることができます。たとえば、あなたは間違ってTIMEOUT_ON_RESOURCEで新しい実行時例外ハンドラを検出したい、あなたは単にあなたのプログラムの中で次の文を使用します。
  TIMEOUT_ON_RESOUCEを上げ、
  
  次のようなオーダーエントリの例では、順序が株式の数がスローされているよりも小さいときにあれば異常、例外、例外処理キャプチャ
  宣言するを
  例外inventory_too_low;
  
  ---他の宣言文を
  BEGIN
  THEN inventory_rec.qty> IFのorder_rec.qtyを
  RAISEのinventory_too_low;
  END IFに
  例外を
  inventory_too_lowがTHEN WHEN
  order_rec.staus:= '入荷待ち';
  END;
  
  RAISE_APPLICATION_ERRORは例外に例外をスローする機能を内蔵しており、エラー番号とエラーメッセージが表示されます。デフォルトのエラー番号のカスタム例外が+1され、デフォルトの情報がUser_Defined_Exceptionです。RAISE_APPLICATION_ERROR機能を実行することができ、異常部分は、特殊な例外を除いて、明示的にスローされたエラー番号名付け、PL / SQLプログラムブロックを呼び出します。RAISE_APPLICATION_ERROR(エラー番号、メッセージ[、真 、偽]))
  
  エラー番号の範囲は-20999に-20000です。エラーメッセージは、最大2048バイトのテキスト文字列です。TRUEおよびFALSE手段スタックエラー(エラー・スタック)に(TRUE)を添加するか、上書き(オーバーライト)エラー・スタック(FALSE)。デフォルトはFALSEです。
  
  次のコードに示すように:
  IFはTHEN product_not_found
  RAISE_APPLICATION_ERROR(-20 123、 'Invald製品コード'、TRUE)は、
  END IF。

-------------------------------------------------- ------------------------------------------------

時に異常スロー後に、例外が処理され、解決されたときに制御ステートメントの次の部分に制御が戻りますが、レイヤー上で実行され、例外が起こった場所に戻ることができないことを意味異常に無条件で制御します。
  BEGIN
  DECLAREの
  、bad_credit例外を
  BEGIN
  ;レイズbad_creditの
  異常、制御通過; -
  EXCEPTION
  bad_credit THEN
  DBMS_OUTPUT.PUT_LINE( 'bad_credit');
  END;
  ポスト--bad_credit例外処理、制御パス
  例外
  OTHERS THEN
  
  -コントロールここbad_creditから異常な移動
  
  - bad_creditのように処理されている
  
  END;
  
  例外が発生すると、例外ハンドラ内のブロックは、制御をいずれかをブロックするために移すか、例外処理部に伝達されません。
  
  BEGIN
  DECLARE ---内部ブロックが開始
  
  bad_credit例外;
  BEGIN
  レイズbad_creditと、
  
  -異常は、操舵制御を発生し;
  EXCEPTION
  WHEN ZERO_DIVIDE THEN -例外bad_credite扱うことができない
  DBMS_OUTPUT.PUT_LINE(「誤差によりゼロ除算」);
  
  -インナーブロックの端END
  
  例外が解決されていないため、ここでは到達できない制御- 、
  
  -異常な一部
  
  の例外
  WHEN OTHERS THEN
  - bad_credit、制御がここに転送されるので、解決しない
  ENDを。

おすすめ

転載: www.cnblogs.com/libin6505/p/11720226.html