4
ブレイク機能を持つループマクロを作成しようとしています。基本的には、X(データセットから派生したもの)が真になるまで、特定のアクションを繰り返すことを望みます。コンパイラはこのアプローチが気に入らないようです( 'Constant expression expected'を返す)ので、既知の回避策があるかどうか疑問に思っていましたか?クエリの結果を使用してECLループマクロを制御する
完全に人工的な例は、以下に提供することによって呼び出される。
LoopFunction(5);
BWRウィンドウから。
EXPORT LoopFunction(NMax = 5) := MACRO
Rec := RECORD
INTEGER i;
END;
#DECLARE(i);
OUTPUT(DATASET([1], REC), ,'~TEMP::MB::LOOPTEST' + %i%, COMPRESSED, OVERWRITE);
#SET(i, 2);
shouldIbreak := DATASET('~TEMP::MB::LOOPTEST' + (%i% - 1), Rec, THOR);
#LOOP
OUTPUT(shouldIbreak +DATASET([%i%], REC), ,'~TEMP::MB::LOOPTEST' + %i%, COMPRESSED, OVERWRITE);
#SET (i, %i%+1);
#IF (COUNT(shouldIbreak) > Nmax);
#BREAK
#END
#END
ENDMACRO;