ACCEPT/REJECT

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 ステートメントは、処理ループ内でデータレコードを読み込むステートメント(FINDREADHISTOGRAMCALL FILESORT または READ WORK FILE)とともに使用します。指定した条件は、レコードが選択され、読み込まれた後に評価されます。

ACCEPT/REJECT ステートメントの処理に達すると、レコードを読むステートメントで開始された現在稼働している最も内側の処理ループが、内部的に参照されます。

ACCEPT/REJECT ステートメントがサブルーチン内にあり、それがレコードの除外(REJECT)である場合、処理ループに入ったサブルーチンは自動的に終了します。そして、現在稼働している最も内側の処理ループの次のレコードで処理が続けられます。

構文説明

構文要素 説明
IF
IF 節:
FINDREAD、または HISTOGRAM ステートメントでレコードが選択された/読み込まれた場合、IF 節を ACCEPT または REJECT ステートメントで使用して、指定された条件に加えて論理条件の基準を指定することもできます。論理条件の基準は、レコードが読み込まれ、レコードの処理が開始した後に評価されます。
logical-condition
論理条件の基準:
基本の条件は、1 つの関係式です。複数の関係式を論理演算子(ANDOR)と組み合わせて、複合条件を構成することができます。

また、演算式を使用して、1 つの関係式を構成することもできます。

論理条件に使用するフィールドとして、データベースフィールドあるいはユーザー定義変数が指定できます。論理条件の詳細については、『プログラミングガイド』の「論理条件基準」を参照してください。

注意:
ACCEPT/REJECT ステートメントを HISTOGRAM ステートメントで使用する場合、HISTOGRAM ステートメントで指定したデータベースフィールドだけが論理条件として使用できます。

複数の ACCEPT/REJECTステートメントの処理

通常 1 つの処理ループ内では、ACCEPT または REJECT ステートメントを 1 つのみ使用します。2 つ以上の ACCEPT/REJECT連続して指定した場合は、次の条件が適用されます。

  • 同一処理ループ内に、続けて ACCEPT および REJECT ステートメントを使用すると、指定した順序で処理されます。

  • ACCEPT 条件を満たすと、そのレコードは受け入れ(ACCEPT)られます。同じ処理ループ内の連続した ACCEPT/REJECT ステートメントは処理されません。

  • REJECT 条件を満たすと、そのレコードは除外(REJECT)されます。同じ処理ループ内の連続した ACCEPT/REJECT ステートメントは処理されません。

  • 処理が最後の ACCEPT/REJECT ステートメントに達すると、そのレコードを受け入れるか除外されるかは、最後のステートメントで決定します。

他のステートメントが、複数の ACCEPT/REJECT ステートメントの間に挿入されていると、各 ACCEPT/REJECT ステートメントは独立して処理されます。

リミット表記

ACCEPT または REJECT ステートメントを含む処理ループに対して、LIMIT ステートメントや他の制限指定が与えられている場合は、各処理レコードは受け入れられる(ACCEPT)か除外される(REJECT)かにかかわらずカウントされ、制限数と比較されます。

例 1 - ACCEPT

** 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

プログラム ACREX1 の出力:

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

例 2 - ACCEPT / REJECT

** 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

プログラム ACREX2 の出力:

          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