Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.