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

目的

指定された条件が真と評価されるまで、1つ以上の文の実行を繰り返します。

呼び出し

実行可能形式。

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

構文

[ 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パラメータを使用することはできません。

ANSI準拠

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

許可

なし。

例外処理

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

REPEATとWHILEの相違

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

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

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

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

ルール

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

例: 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を参照してください。