SQL Engine Reference (v11)

IF

備考

IF ステートメントにより、条件の値に基づく条件付き実行を提供します。IF ... THEN ... ELSE ... END IF 構造は、2 つのステートメント ブロックのどちらに基づいて実行するかをフロー制御します。IF ... ELSE 構文も使用できます。

IF ステートメントは、ストアド プロシージャとトリガーの本体で使用できます。

IF ステートメントをネストできる数に制限はありませんが、クエリは通常どおり、合計長の制限やその他のアプリケーション制限の影響を受けます。


メモ

Pervasive PSQL と T.SQL を含んでいる混合構文は使用できません。IF...THEN...ELSE...END IF 構文または IF...ELSE 構文のいずれかを使用できます。

IF または ELSE 条件で複数のステートメントを使用する場合は、BEGIN と END を使ってステートメント ブロックの始まりと終わりを示す必要があります。


構文

IF (ブール条件) 
  BEGIN 
    SQL ステートメント 
  END 
ELSE 
  BEGIN 
    SQL ステートメント 
  END 

次の例では、IF ステートメントを使用して、vInteger の値が正か負かによって変数 Negative を 1 または 0 に設定します。

IF (:vInteger < 0) THEN 
  SET :Negative = '1'; 
ELSE 
  SET :Negative = '0'; 
END IF; 
666

次の例では、IF ステートメントを使用して、定義された条件(SQLSTATE = '02000')のループをテストします。この条件が満たされた場合、WHILE ループが終了します。

FETCH_LOOP: 
WHILE (:counter < :NumRooms) DO 
  FETCH NEXT FROM cRooms into :CurrentCapacity; 
  IF (SQLSTATE = '02000') THEN 
    LEAVE FETCH_LOOP; 
  END IF; 
  SET :counter = :counter + 1; 
  SET :TotalCapacity = :TotalCapacity + 
:CurrentCapacity; 
END WHILE; 
666
IF (:vInteger > 50) 
  BEGIN 
    SET :vInteger = :vInteger + 1;  
    INSERT INTO test VALUES('Test'); 
  END; 
ELSE 
  SET :vInteger = :vInteger - 1; 

関連項目

CREATE PROCEDURE

CREATE TRIGGER


HAVING

IN