PERFORM procedure-name-1 THROUGH procedure-name-2
      VARYING identifier-2 FROM identifier-3
            BY identifier-4 UNTIL condition-1
         AFTER identifier-5 FROM identifier-6
            BY identifier-7 UNTIL condition-2
  1. ID-2ID-5 が、 それらの初期値である ID-3 と ID-6 にそれぞれ設定されます。
  2. 条件-1 が次のように評価されます。
    1. 条件-1 が偽である場合には、ステップ 3 ~ 7 が実行されます。
    2. 条件-1 が真である場合には、制御権が PERFORM ステートメントに続くステートメントに直接渡されます。
  3. 条件-2 が次のように評価されます。
    1. 条件-2 が偽である場合には、ステップ 4 ~ 6 が実行されます。
    2. 条件-2 が真である場合には、ID-2 が ID-4 だけ増やされ、ID-5 が ID-6 の現行値に設定され、ステップ 2 が繰り返されます。
  4. プロシージャー名-1 からプロシージャー名-2 (指定されている場合) までのすべてのものが 1 回実行されます。
  5. ID-5 が ID-7 だけ増やされます。
  6. 条件-2 が真になるまで、ステップ 3 からステップ 5 が繰り返されます。
  7. 条件-1 が真になるまで、ステップ 2 からステップ 6 が繰り返されます。
PERFORM ステートメントの実行終了時には、次のようになります。

図 1 は、TEST BEFORE 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。 図 2 は、TEST AFTER 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。

図 1. TEST BEFORE を使用して 2 つの ID を変更する場合
この図は TEST BEFORE 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです

上の図では、ID-5 と ID-2 が関係をもたないことを想定してします。 一方が他方に依存している場合 (例えば添え字を介して)、結果は予測できますが、一般的に望ましいものではありません。

図 2. TEST AFTER を使用して 2 つの ID を変更する場合
この図は TEST AFTER 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです