PL/SQL IF文で条件を指定して条件分岐する
PL/SQLでIFやELSEを使用して条件を分岐する方法を紹介します。
サンプルのSQLはPL/SQL 変数を宣言して値を設定するで扱ったものに対して修正しています。
以下のSQLはパラメータ(IN_PARAM2)の値によって処理を分岐しています。
ELSE IFではなくELSIFなので注意が必要です。
また、END IFの最後に;をつけるのを忘れないようにします。
CREATE OR REPLACE PROCEDURE FOOBAR(IN_PARAM1 IN CHAR, IN_PARAM2 IN NUMBER, OUT_PARAM1 OUT CHAR) AS
/*変数を宣言*/
MON NUMBER := 3;
NEW_DATE CHAR(8);
BEGIN
IF IN_PARAM2 = 1 THEN
NEW_DATE := TO_CHAR(ADD_MONTHS(TO_DATE(IN_PARAM1), MON), 'YYYYMMDD');
ELSIF IN_PARAM2 = 2 THEN
NEW_DATE := TO_CHAR(ADD_MONTHS(TO_DATE(IN_PARAM1), -MON), 'YYYYMMDD');
ELSE
NEW_DATE := NULL;
END IF;
OUT_PARAM1 := NEW_DATE;
END;
/複数の条件を指定する
通常のSQLのWHERE句の条件などと同じ要領でANDやORを使って指定します。
IF IN_PARAM2 = 1 AND LENGTH(IN_PARAM1) = 8 THEN
NEW_DATE := TO_CHAR(ADD_MONTHS(TO_DATE(IN_PARAM1), MONTHS), 'YYYYMMDD');
ELSIF IN_PARAM2 = 2 OR IN_PARAM2 = 3 THEN
NEW_DATE := TO_CHAR(ADD_MONTHS(TO_DATE(IN_PARAM1), -MONTHS), 'YYYYMMDD');
ELSE
NEW_DATE := NULL;
END IF;