LOOP - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vqj1592443206677.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1148
Product Category
Software
Teradata Vantage

定義されている繰返し文内に組み込まれている1つまたは複数の文を繰り返し実行します。

ANSI準拠

LOOPは、ANSI/ISO SQL:2011に準拠しています。

必要な権限

なし。

呼び出し

実行可能形式。

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

構文

[ label_name : ] LOOP
  statement [...]
  END LOOP [ label_name ] ;

構文要素

label_name
LOOP文のオプションのラベル
終了ラベルが指定されている場合、終了ラベルと同等の開始ラベルを指定する必要があります。開始ラベルはコロン(:)で終わっている必要があります。
BEGIN END複合文のラベル名は繰返し文内で再使用できません。入れ子になっているLOOP文のグループ内で1つのラベル名を再使用することはできませんが、入れ子になっていない別の繰返し文で再使用することはできます。
statement
無条件で処理される文リスト。リストには、次のものが含まれます。
  • SQL DML、DDL、またはDCL文(動的SQLも含む)
  • 制御文、BEGIN ENDを含む。
詳細については、<FOR>のstatementを参照してください。

使用上の注意

  • LOOPは文ラベルで修飾できます。

    LOOP内に指定されているLEAVE文は繰返し文を終了し、ラベルが指定されている文の次の文に制御を渡します。

  • 文を必ず正常に終了させるためには、LOOP文の内側にLEAVE文を指定する必要があります。

    指定しないと、ループが繰り返され、非同期のアボートが生じるまで停止できません。

  • LOOP終了エラーの原因
    • LOOP内の文に例外条件が生じても、その条件に対するCONTINUEハンドラーが宣言されていれば、ストアド プロシージャの実行は続けられます。
    • EXITハンドラーが宣言されている場合、文はストアド プロシージャの実行を終了します。
    • LOOP内の文に例外条件が生じ、関連するSQLSTATEコードがハンドラーに定義されていない場合、ループとストアド プロシージャの両方が終了します。

例: LOOP文

以下に示すのは正しいLOOP文です。

L1:
LOOP
  INSERT INTO transaction (trans_num, account_num)     VALUES (hCounter, hAccountNum);
  SET hCounter = hCounter - 1;
  IF hCounter = 0 THEN
     LEAVE L1;
  END IF;
END LOOP L1;