16.20 - LOOP - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

目的

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

呼び出し

実行可能形式。

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

構文





















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

ANSI準拠

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

許可

なし。

LOOP終了エラーの原因

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

ルール

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

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

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

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

例: 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;