ACCEPT |
[IF ] logical-condition |
||
REJECT |
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:AT BREAK | AT START OF DATA | AT END OF DATA | BACKOUT TRANSACTION | BEFORE BREAK PROCESSING | DELETE | END TRANSACTION | FIND | HISTOGRAM | GET | GET SAME | GET TRANSACTION DATA | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE
関連機能グループ:「データベースへのアクセスと更新」
ステートメント ACCEPT
および REJECT
は、ユーザー指定の論理条件を基準にして、レコードを受け入れまたは除外します。 ACCEPT
/REJECT
ステートメントは、データレコードを読み込むステートメント(FIND
、READ
、HISTOGRAM
、CALL FILE
、SORT
、READ WORK FILE
)とともに、処理ループ内で使用します。 指定した条件は、レコードが選択され、読み込まれた後に評価されます。
ACCEPT
/REJECT
ステートメントの処理に達すると、レコードを読むステートメントで開始された現在稼働している最も内側の処理ループが、内部的に参照されます。
ACCEPT
/REJECT
ステートメントがサブルーチン内にあり、それがレコードの除外(REJECT)である場合、処理ループに入ったサブルーチンは自動的に終了します。そして、現在稼働している最も内側の処理ループの次のレコードで処理が続けられます。
IF | FIND 、READ 、または HISTOGRAM ステートメントでレコードが選択され、読み込まれる場合、IF 節を ACCEPT または REJECT ステートメントで使用して、指定された条件に加えて論理条件の基準を指定することもできます。 論理条件の基準は、レコードが読み込まれ、レコードの処理が開始した後に評価されます。
|
---|---|
logical-condition | 基本の条件は、1 つの関係式です。 複数の関係式を論理演算子(AND 、OR )と組み合わせて、複合条件を構成することができます。
また、演算式を使用して、1 つの関係式を構成することもできます。 論理条件に使用するフィールドとして、データベースフィールドあるいはユーザー定義変数が指定できます。 論理条件の詳細については、『プログラミングガイド 』の「論理条件基準」を参照してください。
|
通常 1 つの処理ループ内では、ACCEPT
または REJECT
ステートメントを使用します。 2 つ以上の ACCEPT
/REJECT
を連続して指定した場合は、次の条件が適用されます。
同一処理ループ内に、続けて ACCEPT
および REJECT
ステートメントを使用すると、指定した順序で処理されます。
ACCEPT
条件を満たすと、そのレコードは受け入れ(ACCEPT)られます。同じ処理ループ内の連続した ACCEPT
/REJECT
ステートメントは処理されません。
REJECT
条件を満たすと、そのレコードは除外(REJECT)されます。同じ処理ループ内の連続した ACCEPT
/REJECT
ステートメントは処理されません。
処理が最後の ACCEPT
/REJECT
ステートメントに達すると、そのレコードを受け入れるかどうかは、最後の ACCEPT
/REJECT
ステートメントで決定されます。
他のステートメントが、複数の ACCEPT
/REJECT
ステートメントの間に挿入されていると、各 ACCEPT
/REJECT
ステートメントは独立して処理されます。
ACCEPT
または REJECT
ステートメントを含む処理ループに対して、LIMIT
ステートメントや他の制限指定が与えられている場合は、各処理レコードは受け入れられる(ACCEPT)か除外される(REJECT)かにかかわらずカウントされ、制限数と比較されます。
ACCEPT
/REJECT
処理では、プロファイルパラメータ RI
(ISNの解放)が RI=ON
に設定されていない限り、ホールド中のレコードがホールド状態から解放されることはありません。
** Example 'ACREX1': ACCEPT ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 SEX 2 MAR-STAT END-DEFINE * LIMIT 50 READ EMPLOY-VIEW ACCEPT IF SEX='M' AND MAR-STAT = 'S' WRITE NOTITLE '=' NAME '=' SEX 5X '=' MAR-STAT END-READ END
NAME: MORENO S E X: M MARITAL STATUS: S NAME: VAUZELLE S E X: M MARITAL STATUS: S NAME: BAILLET S E X: M MARITAL STATUS: S NAME: HEURTEBISE S E X: M MARITAL STATUS: S NAME: LION S E X: M MARITAL STATUS: S NAME: DEZELUS S E X: M MARITAL STATUS: S NAME: BOYER S E X: M MARITAL STATUS: S NAME: BROUSSE S E X: M MARITAL STATUS: S NAME: DROMARD S E X: M MARITAL STATUS: S NAME: DUC S E X: M MARITAL STATUS: S NAME: BEGUERIE S E X: M MARITAL STATUS: S NAME: FOREST S E X: M MARITAL STATUS: S NAME: GEORGES S E X: M MARITAL STATUS: S
** Example 'ACREX2': ACCEPT/REJECT ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 SALARY (1) * 1 #PROC-COUNT (N8) INIT <0> END-DEFINE * EMP. FIND EMPLOY-VIEW WITH NAME = 'JACKSON' WRITE NOTITLE *COUNTER NAME FIRST-NAME 'SALARY:' SALARY(1) /* ACCEPT IF SALARY (1) LT 50000 WRITE *COUNTER 'ACCEPTED FOR FURTHER PROCESSING' /* REJECT IF SALARY (1) GT 30000 WRITE *COUNTER 'NOT REJECTED' /* ADD 1 TO #PROC-COUNT END-FIND * SKIP 2 WRITE NOTITLE 'TOTAL PERSONS FOUND ' *NUMBER (EMP.) / 'TOTAL PERSONS SELECTED' #PROC-COUNT END
1 JACKSON CLAUDE SALARY: 33000 1 ACCEPTED FOR FURTHER PROCESSING 2 JACKSON FORTUNA SALARY: 36000 2 ACCEPTED FOR FURTHER PROCESSING 3 JACKSON CHARLIE SALARY: 23000 3 ACCEPTED FOR FURTHER PROCESSING 3 NOT REJECTED TOTAL PERSONS FOUND 3 TOTAL PERSONS SELECTED 1