このページは機械翻訳したものです。
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
ストアドプログラムの IF ステートメントは、基本的な条件構造構文を実装します。
ここで説明されている IF ステートメントとは異なる IF() 関数も存在します。 セクション12.5「フロー制御関数」を参照してください。 IF ステートメントは THEN、ELSE、および 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 ;
この例では、内側の IF は n が m に等しくない場合にのみ評価されます。