Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.6.5.2 IF 構文

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

ストアドプログラムの IF ステートメントは、基本的な条件構造構文を実装します。

注記

ここで説明されている IF ステートメントとは異なる IF() 関数も存在します。セクション12.4「制御フロー関数」を参照してください。IF ステートメントは THENELSE、および ELSEIF 句を含むことができ、END IF で終了します。

search_condition が true に評価された場合は、対応する THEN または ELSEIF 句の statement_list が実行されます。どの search_condition も一致しない場合は、ELSE 句の statement_list が実行されます。

statement_list は、1 つ以上の SQL ステートメントで構成されます。空の statement_list は許可されません。

IF ... END IF ブロックは、次の例に示すように、ストアドプログラム内で使用されるその他のすべてのフロー制御ブロックと同様にセミコロンで終了する必要があります。

DELIMITER //

CREATE FUNCTION SimpleCompare(n INT, m INT)
  RETURNS VARCHAR(20)

  BEGIN
    DECLARE s VARCHAR(20);

    IF n > m THEN SET s = '>';
    ELSEIF n = m THEN SET s = '=';
    ELSE SET s = '<';
    END IF;

    SET s = CONCAT(n, ' ', s, ' ', m);

    RETURN s;
  END //

DELIMITER ;

ほかのフロー制御構造構文と同様に、IF ... END IF ブロックは、ほかのフロー制御構造構文 (ほかの IF ステートメントを含む) 内にネストできます。各 IF は、独自の END IF とそれに続くセミコロンで終了する必要があります。次に示すように、インデントを使用して、ネストされたフロー制御ブロックを人間が読みやすくすることができます (ただし、これが MySQL に必要なわけではありません)。

DELIMITER //

CREATE FUNCTION VerboseCompare (n INT, m INT)
  RETURNS VARCHAR(50)

  BEGIN
    DECLARE s VARCHAR(50);

    IF n = m THEN SET s = 'equals';
    ELSE
      IF n > m THEN SET s = 'greater';
      ELSE SET s = 'less';
      END IF;

      SET s = CONCAT('is ', s, ' than');
    END IF;

    SET s = CONCAT(n, ' ', s, ' ', m, '.');

    RETURN s;
  END //

DELIMITER ;

この例では、内側の IFnm に等しくない場合にのみ評価されます。


User Comments
Sign Up Login You must be logged in to post a comment.