エラーを引き起こした文に続くコードは、プロシージャ定義に ON EXCEPTION RESUME 句が含まれる場合のみ、実行されます。
ネストされた複合文を使用すると、エラーの後にどの文が実行され、どの文が実行されないのかを制御できます。
次の例は、ネストされた複合文をどのように使用してフローを制御するかを示します。
DROP PROCEDURE OuterProc; DROP PROCEDURE InnerProc; CREATE PROCEDURE InnerProc() BEGIN BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE VALUE '52003'; MESSAGE 'Hello from InnerProc' TO CLIENT; SIGNAL column_not_found; MESSAGE 'Line following SIGNAL' TO CLIENT EXCEPTION WHEN column_not_found THEN MESSAGE 'Column not found handling' TO CLIENT; WHEN OTHERS THEN RESIGNAL; END; MESSAGE 'Outer compound statement' TO CLIENT; END; CALL InnerProc(); |
Interactive SQL の [メッセージ] タブに、次のメッセージが表示されます。
Hello from InnerProc Column not found handling Outer compound statement |
エラーを引き起こした SIGNAL 文が検出されると、制御は複合文の例外ハンドラに渡されて、「カラムが見つかりません。
」というメッセージが出力されます。次に制御は外部複合文に渡され、「Outer compound statement
」メッセージが出力されます。
内部複合文でカラムが見つかりません。(SQLSTATE) 以外のエラーが検出されると、例外ハンドラは RESIGNAL 文を実行します。RESIGNAL 文は、呼び出しを行った環境に制御を直接戻します。外部複合文の残りの文は実行されません。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |