IF ステートメント
IF ステートメントは、条件の評価に基づいて実行パスを選択します。
呼び出し
このステートメントは、以下の対象に組み込むことができます。
- SQL プロシージャー定義
- コンパウンド SQL (コンパイル済み) ステートメント
- コンパウンド SQL (インライン) ステートメント
許可
このステートメントは動的に準備できないので、グループ特権は考慮されません。
構文
説明
- 検索条件
- 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