IF ステートメント

IF ステートメントは、条件の評価に基づいて実行パスを選択します。

呼び出し

このステートメントは、以下の対象に組み込むことができます。
  • SQL プロシージャー定義
  • コンパウンド SQL (コンパイル済み) ステートメント
  • コンパウンド SQL (インライン) ステートメント
コンパウンド・ステートメントは、SQL プロシージャー定義、SQL 関数定義、または SQL トリガー定義に組み込むことができます。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

このステートメントは動的に準備できないので、グループ特権は考慮されません。

構文

Read syntax diagramSkip visual syntax diagramIFsearch-conditionTHEN SQL-routine-statementELSEIFsearch-conditionTHENSQL-routine-statementELSESQL-routine-statementEND IF
SQL-routine-statement
Read syntax diagramSkip visual syntax diagramSQL-procedure-statement;SQL-function-statement;

説明

検索条件
SQL ステートメントを呼び出す条件を指定します。 条件が不明または偽の場合、条件が真になるか、または処理が ELSE 節に到達するまで、 処理は次の検索条件に継続されます。
SQL プロシージャー・ステートメント
前の search-condition が真の場合に呼び出されるステートメントを指定します。 SQL-procedure-statement を適用できるのは、SQL プロシージャーのコンテキスト内、またはコンパウンド SQL (コンパイル済み) ステートメント内に限られます。 コンパウンド SQL (コンパイル済み) ステートメントの SQL-procedure-statement を参照してください。
SQL-関数-ステートメント
前の search-condition が真の場合に呼び出されるステートメントを指定します。 SQL-function-statement は、コンパウンド SQL (インライン化) ステートメント、SQL トリガー、SQL 関数、または SQL メソッドのコンテキスト内でのみ使用できます。 FOR ステートメントの SQL-function-statement の説明を参照してください。

以下の SQL プロシージャーでは、 2 つの IN パラメーター (従業員番号 employee_number および従業員評定 rating) を使用します。 rating の値に応じて、employee 表が salary 列と bonus 列の新しい値で更新されます。

   CREATE PROCEDURE UPDATE_SALARY_IF
     (IN employee_number CHAR(6), INOUT rating SMALLINT)
     LANGUAGE SQL
     BEGIN
       DECLARE not_found CONDITION FOR SQLSTATE '02000';
       DECLARE EXIT HANDLER FOR not_found
         SET rating = -1;
       IF rating = 1
         THEN UPDATE employee
         SET salary = salary * 1.10, bonus = 1000
         WHERE empno = employee_number;
       ELSEIF rating = 2
         THEN UPDATE employee
         SET salary = salary * 1.05, bonus = 500
         WHERE empno = employee_number;
       ELSE UPDATE employee
         SET salary = salary * 1.03, bonus = 0
         WHERE empno = employee_number;
       END IF;
     END