IF - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/xqq1557098602407.ditamap
dita:ditavalPath
ja-JP/xqq1557098602407.ditaval
dita:id
B035-1148
Product Category
Software
Teradata Vantage

目的

条件に対する真の値に基づいた条件付き実行の手段となります。

呼び出し

実行可能な

ストアド プロシージャのみ。

構文

IF conditional_expression THEN statement [...]
  [ ELSEIF conditional_expression THEN statement [...] ]
  [ ELSE statement [...] ]
END IF ;
conditional_expression
IFブロックに組み込まれている1つ以上の文を実行するかどうかを評価するために使用されるブール条件。
条件リストにローカル変数、パラメータ、またはカーソル別名が含まれている場合は、INおよびNOT IN演算子を使用することはできません。
conditional_expressionでOUTパラメータを使用することはできません。
statement
次のいずれか。
  • ストアド プロシージャで使用できるDML、DDL、またはDCL文。これには、動的SQL文が含まれます。
  • 制御文、BEGIN…END複合文を含む。
詳細については、<FOR>のstatementを参照してください。

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の動作

  1. IFの評価が真である場合、IFからELSEIFまでの間の文が実行されます。その後、制御はEND IFに続く文に渡されます。
  2. それぞれのELSEIFに関連した文について、真の値が評価されます。
  3. ELSEIFに関連した文が真と評価される場合、そのブロック内の文が実行されます。それ以降のELSEIF文節は実行されません。
  4. 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の動作

  1. IFの評価が真である場合、IFからELSEIFまでの間の文が実行されます。その後、制御はEND IFに続く文に渡されます。
  2. それぞれのELSEIFに関連した文について、真の値が評価されます。
  3. ELSEIFに関連した文が真と評価される場合、そのブロック内の文が実行されます。それ以降のELSEIF文節は、評価が真であっても実行されません。
  4. 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;