目的
条件に対する真の値に基づいた条件付き実行の手段となります。
呼び出し
実行可能な
ストアド プロシージャのみ。
構文
- conditional_expression
- IFブロックに組み込まれている1つ以上の文を実行するかどうかを評価するために使用されるブール条件。
- statement
- 次のいずれか。
- ストアド プロシージャで使用できるDML、DDL、またはDCL文。これには、動的SQL文が含まれます。
- 制御文、BEGIN…END複合文を含む。
ANSI準拠
IFは、ANSI/ISO SQL:2011に準拠しています。
許可
なし。
ELSEIFのルール
IF文の中にELSEIF句をいくつ指定してもかまいませんが、それぞれが、最初のIF句の場合と同じ条件を関連付けられなければなりません。
IF文の有効な形式
- IF-THEN-END IF
- IF-THEN-ELSE-END
- IF-THEN-ELSEIF-END
- IF-THEN-ELSEIF-THEN-ELSE-END
IF-THEN-END IF
conditional_expressionが真と評価されると、この形式のIFは、IFとEND IF内の文を実行します。
次の文はIF-THEN-END IFの例です。
IF hNoAccts = 1 THEN INSERT INTO temp_table VALUES (hNoAccts, 'One Customer'); END IF;
IF-THEN-ELSE-END IF
conditional_expressionが真と評価されると、この形式のIFは、IFとELSE内の文を実行します。それ以外の場合は、ELSEとEND IF内の文が実行されます。
次の例では、hNoAcctsの値に応じて、指定されたINSERT文のうちの1つだけが実行されます。
IF hNoAccts = 1 THEN INSERT INTO temp_table VALUES (hNoAccts, 'One customer'); ELSE INSERT INTO temp_table VALUES (hNoAccts, 'More than one customer'); END IF;
IF-THEN-ELSEIF-ENDの動作
- IFの評価が真である場合、IFからELSEIFまでの間の文が実行されます。その後、制御はEND IFに続く文に渡されます。
- それぞれのELSEIFに関連した文について、真の値が評価されます。
- ELSEIFに関連した文が真と評価される場合、そのブロック内の文が実行されます。それ以降のELSEIF文節は実行されません。
- IF/END IFブロック内の文がどれも真でない場合、どの文も実行されません。
次の例では、hNoAcctsの値に応じて、ELSEIF句の1つだけが、関連しているDML文を実行するか、または何も実行しません。
IF hNoAccts = 1 THEN INSERT INTO temp_table VALUES (hNoAccts, 'One customer'); ELSEIF hNoAccts = 0 THEN INSERT INTO temp_table VALUES (hNoAccts, 'No customer'); END IF;
次の例では、hNoAcctsの値に応じて、ELSEIF句の1つだけが、関連しているDML文を実行するか、または何も実行しません。
IF hNoAccts = 1 THEN INSERT INTO temp_table VALUES (hNoAccts, 'One customer'); ELSEIF hNoAccts = 0 THEN INSERT INTO temp_table VALUES (hNoAccts, 'No customer'); ELSEIF hNoAccts < 0 THEN INSERT INTO temp_table VALUES (hNoAccts, 'Unknown customer'); END IF;
IF-THEN-ELSEIF-ELSE-ENDの動作
- IFの評価が真である場合、IFからELSEIFまでの間の文が実行されます。その後、制御はEND IFに続く文に渡されます。
- それぞれのELSEIFに関連した文について、真の値が評価されます。
- ELSEIFに関連した文が真と評価される場合、そのブロック内の文が実行されます。それ以降のELSEIF文節は、評価が真であっても実行されません。
- IF/ELSEIFブロック内の文がどれも真と評価されない場合、ELSE句に関連している文が実行されます。
次の例では、hNoAcctsの値に応じて、ELSEIFまたはELSE句に関連しているDML文の1つだけを実行します。
IF hNoAccts = 1 THEN INSERT INTO temp_table VALUES (hNoAccts, 'One customer'); ELSEIF hNoAccts = 0 THEN INSERT INTO temp_table VALUES (hNoAccts, 'No customer'); ELSE INSERT INTO temp_table VALUES (hNoAccts, 'More than one customer'); END IF;
次の例では、hNoAcctsの値に応じて、ELSEIF句またはELSE句に関連しているDML文の1つだけを実行します。
IF hNoAccts = 1 THEN INSERT INTO temp_table VALUES (hNoAccts, 'One customer'); ELSEIF hNoAccts = 0 THEN INSERT INTO temp_table VALUES (hNoAccts, 'No customer'); ELSEIF hNoAccts < 0 THEN INSERT INTO temp_table VALUES (hNoAccts, 'Nonvalid customer'); ELSE INSERT INTO temp_table VALUES (hNoAccts, 'More than one customer'); END IF;