AT END OF DATA

ストラクチャードモード構文

[AT] END [OFDATA [(r)]
statement ../graphics/dot3.gif
END-ENDDATA

レポーティングモード構文

[AT] END [OFDATA [(r)]

statement

DO statement ../graphics/dot3.gif DOEND

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:ACCEPT/REJECT | AT BREAK | AT START OF DATA | BACKOUT TRANSACTION | BEFORE BREAK PROCESSING | DELETE | END TRANSACTION | FIND | GET | GET SAME | GET TRANSACTION DATA | HISTOGRAM | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE

関連機能グループ:データベースへのアクセスと更新


関数

AT END OF DATA ステートメントは、データベース処理ループで選択された全レコードの処理が終了したときに行う処理を指定します。

このセクションでは、次のトピックについて説明します。

プログラミングガイド』の「AT START/END OF DATA ステートメント」を参照してください。

処理

このステートメントは非手続き型なので、プログラム内の位置ではなくイベントによって実行されます。

データベースフィールドの値

処理ループで AT END OF DATA 条件が発生したときに、すべてのデータベースフィールドは、最後に処理されたレコードの値になります。

位置

このステートメントは、対応するループ生成ステートメントと同じプログラムモジュール内に指定する必要があります。

システム関数

AT END OF DATA ステートメントで使用できる Natural システム関数については、『システム関数』ドキュメントの「処理ループでのシステム関数の使用」セクションを参照してください。

制限

  • このステートメントは、次のステートメントのいずれかで始まる処理ループにのみ使用できます。FINDREADREAD WORK FILEHISTOGRAM、または SORT

  • また、処理ループ内で 1 回だけ使用できます。

  • END OF DATA が参照する処理ループに入らなかった場合、このステートメントは評価されません

構文説明

構文要素 説明
(r)
特定の処理ループの参照:
AT END OF DATA ステートメントは、表記 (r) によって、アクティブな特定の処理ループに関連付けることができます。

この表記がない場合、AT END OF DATA ステートメントはアクティブなデータベース処理ループ内の一番外側に関連付けられます。

statement ...
AT END OF DATA 条件で実行するステートメント:

ストラクチャードモードでは、状況に応じて、1 つ以上の適切なステートメントを指定する必要があります。ステートメントの例については、下記の「」を参照してください。

END-ENDDATA
AT END OF DATA ステートメントの終了:

ストラクチャードモードでは、AT END OF DATA ステートメントを終了するには、Natural の予約語 END-ENDDATA を使用する必要があります。

レポーティングモードでは、状況に応じて、DO ... DOEND ステートメントを使用して 1 つ以上の適切なステートメントを指定し、AT END OF DATA ステートメントを終了します。単一のステートメントのみを指定する場合は、DO ... DOEND ステートメントを省略できます。よいコーディング習慣に則して、これはお勧めしません。

statement ...
DO statement ... DOEND

** Example 'AEDEX1S': AT END OF DATA                                    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 SALARY    (1)                                                       
  2 CURR-CODE (1)                                                       
END-DEFINE                                                              
*                                                                       
LIMIT 5                                                                 
EMP. FIND EMPLOY-VIEW WITH CITY = 'STUTTGART'                           
  IF NO RECORDS FOUND                                                   
    ENTER                                                               
  END-NOREC                                                             
  DISPLAY PERSONNEL-ID NAME FIRST-NAME                                  
          SALARY (1) CURR-CODE (1)                                      
  /*
   AT END OF DATA                                               
    IF *COUNTER (EMP.) = 0                                     
      WRITE 'NO RECORDS FOUND'                                 
      ESCAPE BOTTOM                                            
    END-IF                                                     
    WRITE NOTITLE / 'SALARY STATISTICS:'                       
                  / 7X 'MAXIMUM:' MAX(SALARY(1))  CURR-CODE (1)
                  / 7X 'MINIMUM:' MIN(SALARY(1))  CURR-CODE (1)
                  / 7X 'AVERAGE:' AVER(SALARY(1)) CURR-CODE (1)
    END-ENDDATA 
  /*                                                           
END-FIND                                                       
*                                                              
END

システム関数』ドキュメントの「処理ループで使用する Natural システム関数」も参照してください。

プログラム AEDEX1S の出力:

PERSONNEL         NAME              FIRST-NAME        ANNUAL   CURRENCY
   ID                                                 SALARY     CODE  
--------- -------------------- -------------------- ---------- --------
                                                                       
11100328  BERGHAUS             ROSE                      70800 DM      
11100329  BARTHEL              PETER                     42000 DM      
11300313  AECKERLE             SUSANNE                   55200 DM      
11300316  KANTE                GABRIELE                  61200 DM      
11500304  KLUGE                ELKE                      49200 DM      
                                                                       
SALARY STATISTICS:                                                     
       MAXIMUM:      70800 DM                                          
       MINIMUM:      42000 DM                                          
       AVERAGE:      55680 DM

レポーティングモードの例については、次のプログラムを参照してください:AEDEX1R