RAISE_ERROR スカラー関数

RAISE_ERROR 関数は、指定された SQLSTATE、SQLCODE -438、および diagnostic-string のエラーが、 この関数を備えたステートメントから戻されるようにします。

構文図を読む構文図をスキップするRAISE_ERROR(sqlstate, diagnostic-string)

スキーマは SYSIBM です。

sqlstate
厳密に 5 バイトの文字ストリング。 これは、長さ 5 と定義された CHAR 型、 または長さ 5 以上と定義された VARCHAR 型でなければなりません。 Unicode データベースでは、この式で GRAPHIC ストリングを返すこともできます。 戻り値が文字ストリングでない場合、関数の評価の前に文字ストリングにキャストされます。
sqlstate 値は、アプリケーションが定義した SQLSTATE に関する以下の規則に従う必要があります。
  • 各文字は、数字 (0 から 9) またはアクセント記号のない大文字の英字 (A から Z) でなければなりません。
  • SQLSTATE クラス (最初の 2 文字) は 0001、または 02 であってはなりません。これらはエラー・クラスではないからです。
  • SQLSTATE クラス (最初の 2 文字) が 0 から 6、または A から H までの文字で始まる場合、サブクラス (最後の 3 文字) は I から Z までの範囲にある文字で始まらなければなりません。
  • SQLSTATE クラス (最初の 2 文字) が文字 78、または 9、あるいは I から Z までの文字で始まる場合、サブクラス (最後の 3 文字) は 0 から 9、または A から Z までの範囲のいずれでもかまいません。

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

diagnostic-string
エラー条件を記述した文字ストリングまたはブール値を返す式。 Unicode データベースでは、この式で GRAPHIC ストリングを返すこともできます。 戻り値が文字ストリングでない場合、関数の評価の前に文字ストリングにキャストされます。 ストリングが 70 バイトを超えると、切り捨てられます。

結果

RAISE_ERROR 関数は、未定義データ・タイプでは常に NULL を戻します。この関数を、データ・タイプを判別できないコンテキストで使用するには、Cast 指定を使用して、NULL 値の戻される値にデータ・タイプを割り当てる必要があります。 CASE 式は、RAISE_ERROR 関数を使う最適のロケーションといえます。

従業員番号と学歴のリストを、学歴を Post Graduate、Graduate、 および Diploma として示します。 学歴が 20 を超える場合は、エラーになります。
   SELECT EMPNO,
     CASE WHEN EDUCLVL < 16 THEN 'Diploma'
          WHEN EDUCLVL < 18 THEN 'Graduate'
          WHEN EDUCLVL < 21 THEN 'Post Graduate'
          ELSE RAISE_ERROR('70001',
            'EDUCLVL has a value greater than 20')
     END
   FROM EMPLOYEE