バージョン 4.2.5
 —  ステートメント  —

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 FILESORTREAD WORK FILE)とともに、処理ループ内で使用します。 指定した条件は、レコードが選択され、読み込まれた後に評価されます。

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

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

Top of page

構文説明

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

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

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

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

Top of page

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

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

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

Top of page

リミット表記

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

Top of page

ホールド状態

ACCEPT/REJECT 処理では、プロファイルパラメータ RI(ISNの解放)が RI=ON に設定されていない限り、ホールド中のレコードがホールド状態から解放されることはありません。

Top of page

例 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                                       

Top of page