このページは機械翻訳したものです。
Press CTRL+C to copyIF 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
ブロックは、次の例に示すように、ストアドプログラム内で使用されるその他のすべてのフロー制御ブロックと同様にセミコロンで終了する必要があります。
Press CTRL+C to copyDELIMITER // 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 に必要なわけではありません)。
Press CTRL+C to copyDELIMITER // 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
に等しくない場合にのみ評価されます。