SQL 解説書

RESIGNAL ステートメント

RESIGNAL ステートメントは、エラーまたは警告条件を再通知するのに使用します。 これを使用すると、指定した SQLSTATE と任意選択のメッセージ・テキストが、 エラーまたは警告とともに戻されます。

構文

>>-RESIGNAL----+----------------------------------------+------><
               '-| signal-value |--+-----------------+--'
                                   '-| signal-info |-'
 
signal-value
 
                .-VALUE-.
|---+-SQLSTATE--+-------+--sqlstate-string-constant--+----------|
    '-condition-name---------------------------------'
 
signal-info
 
|---+---------------------------------------------------------+-|
    '-SET--MESSAGE_TEXT-- = --+-variable-name--------------+--'
                              '-diagnostic-string-constant-'
 

説明

SQLSTATE VALUE sqlstate-string-constant
ここで指定したストリング定数は SQLSTATE を表します。 この定数は、正確に 5 文字の文字ストリング定数でなければならず、 SQLSTATE の規則に従っていなければなりません。

SQLSTATE がこれらの規則に従っていない場合には、エラーになります (SQLSTATE 428B3)。

condition-name
条件の名前を指定します。

SET MESSAGE_TEXT =
エラーまたは警告を記述するストリングを指定します。 このストリングは SQLCA の SQLERRMC フィールドに戻されます。 実際のストリングが 70 バイトを超える場合、警告が出されずに切り捨てられます。 この文節を指定する場合、 SQLSTATE または condition-name も指定しなければなりません (SQLSTATE 42601)。

variable-name
複合ステートメント内で宣言しなければならない SQL 変数を識別します。 この SQL 変数は、CHAR または VARCHAR データ・タイプとして定義しなければなりません。

diagnostic-string-constant
メッセージ・テキストを含んでいる文字ストリング定数を指定します。

以下の例では、ゼロ除算によるエラーを検出します。 IF ステートメントは、 SIGNAL ステートメントを使用して overflow 条件ハンドラーを呼び出します。 その条件ハンドラーは、 RESIGNAL ステートメントを使用して別の SQLSTATE 値をクライアント・アプリケーションに戻します。

   CREATE PROCEDURE divide ( IN numerator INTEGER
                               IN denominator INTEGER
                               OUT result INTEGER
   LANGUAGE SQL
            CONTAINS SQL
        BEGIN
     DECLARE overflow CONDITION FOR SQLSTATE '22003';
       DECLARE CONTINUE HANDLER FOR overflow
       RESIGNAL SQLSTATE'22375' ;
       IF denominator = 0 THEN
       SIGNAL overflow;
     ELSE
        SET result = numerator / denominator;
     END IF;
          END


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]