ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


WHILE制御文

条件の真理値に基づいて複合文で1つ以上のSQL文を繰り返し実行できます。

環境

WHILE制御文は、次の環境の複合文で使用できます。


形式



引数

beginning-label:

制御ループに名前を割り当てます。LEAVE文とともに開始ラベルを使用することにより、WHILEループの終了を制御できます。終了ラベルを含める場合、その終了ラベルは対応する開始ラベルと同じである必要があります。開始ラベルは、そのラベルが含まれているプロシージャ内で一意である必要があります。

compound-use-statement

複合文ブロックで許可されたSQL文を識別します。有効な文のリストは、「複合文」を参照してください。

DO

制御ループの開始をマークします。

END LOOP ending-label

LOOP制御ループの終了をマークします。オプションの終了ラベルを含める場合、その終了ラベルは対応する開始ラベルと正確に一致している必要があります。終了ラベルは、そのラベルが含まれているプロシージャ内で一意である必要があります。

オプションのending-label引数により、特に非常に複雑な複数文プロシージャ・ブロックの場合に、複数文プロシージャが読みやすくなります。

END WHILE ending-label

DO制御ループの終了をマークします。オプションの終了ラベルを含める場合、その終了ラベルは対応する開始ラベルと正確に一致している必要があります。終了ラベルは、そのラベルが含まれているプロシージャ内で一意である必要があります。

オプションのending-label引数により、特に非常に複雑な複数文プロシージャ・ブロックの場合に、複数文プロシージャが読みやすくなります。

LOOP

制御ループの開始をマークします。

WHILE条件

複合文を実行できる回数を制御する検索条件を指定します。

SQLでは、WHILE検索条件が評価されます。条件がTRUEに評価される場合は、関連するSQL文の順序が実行されます。エラー例外が発生しない場合、次の評価を実行するために制御はループの先頭にあるWHILE句に返されます。検索条件がTRUEに評価されるたびに、WHILE-DO文により、DO ... END WHILEブロック内に埋め込まれたSQL文が実行されます。検索条件がFALSEまたはUNKNOWNに評価されると、DO ... END WHILEブロックは無視され、制御は次の文に渡されます。


使用方法

DO...END WHILEとLOOP...END LOOPはセマンティック的には同義ですが、DO...END WHILE構文はANSI/ISO SQL/PSM規格に準拠しています。


例1: WHILE文を使用したサブストリングのカウント


SQL> DECLARE :SUB_STR CHAR;
SQL> DECLARE :SRC_STR CHAR(50);
SQL> BEGIN
cont>   SET :SUB_STR='l';
cont>   SET :SRC_STR='The rain in Spain falls mainly on the plain';
cont> END;
SQL> SET FLAGS 'TRACE';
SQL> BEGIN
cont>-- This procedure counts the occurrence of substrings
cont>   DECLARE :STR_COUNT INTEGER=0;
cont>   DECLARE :CUR_POS INTEGER = POSITION (:SUB_STR IN :SRC_STR);
cont>   WHILE :CUR_POS >0 DO
cont>      SET :STR_COUNT=:STR_COUNT + 1;
cont>         SET :CUR_POS = POSITION (:SUB_STR IN :SRC_STR FROM :CUR_POS + 1);
cont>   END WHILE;
cont>     TRACE 'FOUND ', :STR_COUNT, ' OCCURRENCES OF "', :SUB_STR, '"';
cont> END;
~Xt: Found 4          occurrences of "l"