エラーを引き起こした文に続くコードは、プロシージャー定義に 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 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |