REPEAT - 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準拠

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

必要な権限

なし。

呼び出し

実行可能形式。

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

構文

[ label_name : ] REPEAT statement [...]
  UNTIL conditional_expression
  END REPEAT [ label_name ] ;

構文要素

label_name
REPEAT文のオプションのラベル
終了ラベルが指定されている場合、終了ラベルと同等の開始ラベルを指定する必要があります。開始ラベルはコロン(:)で終わっている必要があります。
BEGIN END複合文のラベル名は繰返し文内で再使用できません。入れ子になっているREPEAT文のグループ内で1つのラベル名を再使用することはできませんが、入れ子になっていない別の繰返し文で再使用することはできます。
statement
実行される文のリスト。
リストには、次のものが含まれます。
  • DML、DDL、またはDCL文(動的SQLも含む)。
  • 制御文、BEGIN ENDを含む。
詳細については、<FOR>のstatementを参照してください。
conditional_expression
REPEATループに組み込まれている1つ以上の文を実行するかどうかを評価するために使用されるブール条件。
条件リストにローカル変数、パラメータ、またはカーソル別名が含まれている場合は、INおよびNOT IN演算子を使用することはできません。
conditional_expressionでOUTパラメータを使用することはできません。

使用上の注意

  • REPEAT文をラベル名で修飾することができます。REPEATにラベル名を使用すると、次のようになります。
    • ブロック内のLEAVE文でそのラベル名を使えば、REPEAT文を抜け出ることができます。
    • ブロック内にITERATE文を指定し、しかもそれがREPEATに関連したラベルを参照していると、UNTIL句で指定した条件式は評価されないで、REPEAT文の先頭から実行が続行されます。
  • 例外処理

    REPEAT文内の文またはUNTIL句の条件式が例外を生じた場合に、その例外条件を処理するハンドラーがストアド プロシージャ内に備えられているときの処置行動は、WHILE文内で発生した例外の場合と同じです。

  • REPEATとWHILEの相違

    REPEAT - END REPEATはWHILE - END WHILE文と類似していますが、次のような違いがあります。

    REPEAT… WHILE …
    無条件で最初の繰返しを実行します。

    REPEATは、常に文シーケンスを少なくとも1回実行します。

    指定されている条件が真になった場合のみ、最初の繰返しとその後の繰返しを実行します。
    指定の条件が満たされるまで文を実行します。 指定の条件が満たされている限り文を実行します。

例: REPEAT文の使用

REPEAT文の使用例を以下に示します。

CREATE PROCEDURE ProcessTrans(IN pAcctNum INTEGER
                              IN pStartTrans INTEGER,
                              IN pEndTrans INTEGER )
BEGIN
    DECLARE vTransNum INTEGER;
    SET vTransNum = pStartTrans;
    ...;
    REPEAT
        INSERT INTO trans (trans_num, acct_nbr)
               VALUES (vTransNum, pAcctNum);
        SET vTransNum = vTransNum + 1;
      UNTIL vTransNum > pEndTrans
    END REPEAT;
    ...;
END;

関連情報

例外を管理するルールについては、LEAVEを参照してください。