ON EXCEPTION RESUME 文が CREATE PROCEDURE 文に含まれていた場合、エラーが起きると、次の文が検査されます。その文がエラーを処理する場合、プロシージャの実行が続行され、エラーが発生した文の次の文を実行します。エラーが発生したとき、呼び出しを行った環境に制御を戻しません。
on_tsql_error オプション設定を使用して、ON EXCEPTION RESUME を使用するプロシージャの動作を変更できます。on_tsql_error オプション [互換性]を参照してください。
エラー処理文には、次のようなものがあります。
次に示すプロシージャは、アプリケーションからプロシージャ OuterProc を呼び出し、OuterProc が InnerProc を呼び出して、そこでエラーが発生した場合の処理を示します。例文は、この項の最初で使用したプロシージャを基にしています。
DROP PROCEDURE OuterProc; DROP PROCEDURE InnerProc; CREATE PROCEDURE OuterProc() ON EXCEPTION RESUME BEGIN DECLARE res CHAR(5); MESSAGE 'Hello from OuterProc.' TO CLIENT; CALL InnerProc(); SET res=SQLSTATE; IF res='52003' THEN MESSAGE 'SQLSTATE set to ', res, ' in OuterProc.' TO CLIENT; END IF END; CREATE PROCEDURE InnerProc() ON EXCEPTION RESUME BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE '52003'; MESSAGE 'Hello from InnerProc.' TO CLIENT; SIGNAL column_not_found; MESSAGE 'SQLSTATE set to ', SQLSTATE, ' in InnerProc.' TO CLIENT; END; CALL OuterProc(); |
Interactive SQL の [メッセージ] タブに、次のメッセージが表示されます。
Hello from OuterProc. Hello from InnerProc. SQLSTATE set to 52003 in OuterProc. |
実行パスを次に示します。
OuterProc は InnerProc を実行して呼び出します。
InnerProc では、SIGNAL 文がエラーを通知します。
MESSAGE 文はエラー処理文ではないので、制御は OuterProc に返され、メッセージは表示されません。
OuterProc では、エラーに続く文が SQLSTATE の値を res という変数に割り当てます。これはエラー処理文なので、実行は継続され、OuterProc メッセージが表示されます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |