Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » ストアドプロシージャー、トリガー、バッチ、ユーザー定義関数 » エラーと警告の処理

 

ネストされた複合文と例外処理

エラーを引き起こした文に続くコードは、プロシージャー定義に 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 文は、呼び出しを行った環境に制御を直接戻します。外部複合文の残りの文は実行されません。