SQL PL、WHILE および REPEAT ループ
この 8 月号の前の版で、非常に便利と思われる SQL PL ループ構造について説明しました。今日は、残りのループ構造について説明します。私が非常に便利だと思うことは、読者が非常に便利だと思うこととは違う場合があるという理由で説明するだけでなく、完全性を求めて説明します。
レビューのため、FOR ループ は、結果セットの行を簡単に処理する方法を提供します。LOOP 構造 は多用途で、どのポイントからもループを終了する自由度があります。残りのループ構造は WHILE と REPEAT です。
WHILE ループはトップテスト・ループです。条件が真である限り動作します。制御がまずループに達したときに管理している条件が偽の場合、ループはまったく実行されません。
WHILE 構文はシンプルです。

WHILE ループはボトムテスト・ループです。条件が真になるまで動作します。REPEAT ループは 1 回以上実行されます。REPEAT の構文もシンプルです。

RPG プログラマーはこれらの構造を DOW 命令コードおよび DOU 命令コードの片割れとして認識します。 図示するため、しばらく前 に書いたトピックに戻らせてください。つまり、リストを一時表に変換する必要性です。以下はそうしたプロシージャーを作成するルーチンです。

プロシージャーの呼び出し方は以下のとおりです。

BuildDepartmentList が動作を開始すると、p_List の値は 3,4,9,11,69 になります。最初の SET はパラメーター p_List の値を v_List にコピーし、コンマを最後に追加します。

これによって、プログラムが変更できる作業変数が提供され、WHILE ループ内の最初の SET は常に正の数を v_Pos に読み込みます。
WHILE ループは v_List が空白でない限り動作します。最初の反復の後:
v_Pos は 2
v_Department は 3
DeptList 表には値 3 の行があります
v_List は 4,9,11,69 になりました
反復のたびに最初の数字が v_List から削除され、その数字を DeptList 表に書き込みます。v_List にブランクの値がある場合、5 回反復するとループは終了します。
WHILE の本文は 5 回実行され、DeptList には行 (レコード) が 5 つあります。行の選択に一時表を使用できるようになりました。

プログラミング言語の構文に関係なく、WHILE ループは WHILE ループで、WHILE ループです。トップテスト・ループおよびボトムテスト・ループの SQL PL 構文は、他の場合同様シンプルです。