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

AT BREAK

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

[AT] BREAK [(r)] [OF] operand1 [/n/]
statement ../graphics/dot3.gif
END-BREAK

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

[AT] BREAK [(r)] [OF] operand1 [/n/]

statement

DO statement../graphics/dot3.gifDOEND

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

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

関連ステートメント: ACCEPT/REJECT | AT START OF DATA | AT END 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 BREAK ステートメントは、コントロールフィールドの値が変わるたびに、1 つ以上のステートメントを実行します。 このステートメントは、自動ブレイク処理と組み合わせて使用します。また、FINDREAD, HISTOGRAMSORTREAD WORK FILE ステートメントとともに使用します。

自動ブレイク処理は、次のように実行されます。処理ループによりレコードが読み取られた直後に、コントロールフィールドがチェックされます。 前のレコードと比較して値が変更されていることが検出された場合、AT BREAK ステートメントブロックに含まれるステートメントが実行されます。 これは、処理ループ内の最初のレコードには適用されません。 さらに、(レコードの読み取りが完了したとき、または ESCAPE BOTTOM ステートメントによって)処理ループが終了した場合、AT BREAK ステートメントブロック内のステートメントの最終実行がトリガされます。

詳細については、『プログラミングガイド』の「自動ブレイク処理」を参照してください。.

AT BREAK ステートメントブロックは、ブレイク条件の発生時にそのステートメントを含んだオブジェクトがアクティブな場合にだけ実行されます。

AT BREAK 条件内で新しく処理ループを開始することができます。 ただし、このループは、その AT BREAK 条件内で閉じる必要があります。

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

AT BREAK ステートメントで使用できる Natural システム関数については、『システム関数』ドキュメントの「処理ループで使用する Natural システム関数」および『プログラミングガイド』の「AT BREAK ステートメントとシステム関数の例」を参照してください。

詳細については、『プログラミングガイド』の「AT BREAK ステートメント」も参照してください。 このセクションでは、次のトピックについて説明しています。

Top of page

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand1   S       A U N P I F B D T L       不可

構文要素の説明:

(r)
参照表記:
デフォルトで、最終の AT BREAK 条件(ループ終了処理)は、常に FINDREADREAD WORK FILEHISTOGRAM、または SORT ステートメントで開始された、一番外側で稼働している処理ループに関連します。

表記 (r) を使用すると、AT BREAK ステートメントの最終ブレイクを、現在オープンしている特定の処理ループに関連付けることができます(AT BREAKステートメントが含まれるそのループを含めて外側のどのループにでも関連付けられます)。

例:
...
READ ...
  FIND ...
    FIND ...
      AT BREAK ...    
        FIND ...
        END-FIND
      END-BREAK
    END-FIND
  END-FIND
END-READ
...
この例では、最終の AT BREAK 条件は、行番号 0120 で開始する READ ループに関連付けられます。 また、AT BREAK 条件を行番号 0130 や 0140 で開始する FIND ループに関連付けられます(ただし、行番号 0160 の FIND には関連付けられません)。

ブレイク階層に (r) を指定する場合は、最初の AT BREAK ステートメントで指定する必要があります。この指定は、その後の全 AT BREAK ステートメントにも適用されます。

operand1
コントロールフィールド:
ブレイクコントロールフィールドとして使用されるフィールドで、通常はデータベースフィールドです。 ユーザー定義変数を使用する場合は、自動ブレイク処理の評価の前に初期化されている必要があります(BEFORE BREAK PROCESSING ステートメントを参照)。 配列の特定のオカレンスをコントロールフィールドとして使用することもできます。
/n/ - 表記 /n/ を使用すると、値の変化を調べるためにチェックされるのは、コントロールフィールドの(左から右へ数えて)最初の n 個の位置だけであることを示すことができます。 この表記は、オペランドがフォーマット A、B、N、または P の場合に使用できます。

コントロールブレイクは、コントロールフィールドの値が変わるか、または AT BREAK ステートメントを適用する処理ループですべてのレコードの処理が終了したときに発生します。

END-BREAK Natural 予約語 END-BREAK を使用して、AT BREAK ステートメントを終了させる必要があります。

Top of page

複数ブレイクレベルの階層

同一プログラムモジュール内の同一処理ループに、複数の AT BREAK ステートメントを指定することができます。 同一処理ループに指定した複数の AT BREAK ステートメントは、連続指定しても、間に他のステートメントを指定しても、ブレイクレベルの階層を形成します。 最初の AT BREAK ステートメントは、一番低いレベルのコントロールブレイクです。続く各 AT BREAK ステートメントは、コントロールブレイクの階層でそれぞれ次に高いブレイクレベルとなります。

階層構造を作る処理ループでも、それぞれのループ内に AT BREAK ステートメントの階層を持つことができます。

例:

ストラクチャードモード: レポーティングモード:
   FIND ...
      AT BREAK
      ...
      END-BREAK
      AT BREAK
      ...
      END-BREAK       
      AT BREAK
      ...
      END-BREAK
   END-FIND
   ...

   FIND ...
      AT BREAK
         DO
         ...
         DOEND
      AT BREAK        
         DO
         ...
         DOEND
   ...

あるブレイクレベルのコントロールフィールドの値が変わると、そのブレイクレベルと、より低いブレイクレベルの処理がすべて行われます(より低いブレイクレベルのコントロールフィールドの値とは関係なく行われます)。

複数のブレイク処理を連続して指定すると、プログラムメンテナンスが容易になります。

下記の「例 3」および『プログラミングガイド』の「複数のコントロールブレイクレベル」セクションを参照してください。

Top of page

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

AT BREAK の他の例については、「処理ループで使用する Natural システム関数」、および例 ATBEX3ATBEX4 を参照してください。

例 1 - AT BREAK

** Example 'ATBEX1S': AT BREAK (structured mode)                        
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 COUNTRY                                                             
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 10                                                                
READ EMPLOY-VIEW BY CITY                                         
AT BREAK OF CITY                                                      
    SKIP 1                                                              
  END-BREAK
  DISPLAY NOTITLE CITY (IS=ON) COUNTRY (IS=ON) NAME                     
END-READ                                                                
*                                                                       
END                                                                    

プログラム ATBEX1S の出力:

        CITY         COUNTRY         NAME        
-------------------- ------- --------------------
                                                 
AIKEN                USA     SENKO               
                                                 
AIX EN OTHE          F       GODEFROY            
                                                 
AJACCIO                      CANALE              
                                                 
ALBERTSLUND          DK      PLOUG               
                                                 
ALBUQUERQUE          USA     HAMMOND             
                             ROLLING             
                             FREEMAN             
                             LINCOLN             
                                                 
ALFRETON             UK      GOLDBERG            
                                                 
ALICANTE             E       GOMEZ              

レポーティングモードの例については、ライブラリ SYSEXRM のプログラム ATBEX1R を参照してください。

例 2 - /n/ 表記を使用した AT BREAK

** Example 'ATBEX2': AT BREAK (with /n/ notation)                       
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 DEPT                                                                
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 10                                                                
READ EMPLOY-VIEW BY DEPT STARTING FROM 'A'                              
AT BREAK OF DEPT /4/                                                  
    SKIP 1                                                              
  END-BREAK
  DISPLAY NOTITLE DEPT NAME                                             
END-READ                                                                
*                                                                       
END                                                                    

プログラム ATBEX2 の出力:

DEPARTMENT         NAME        
   CODE                        
---------- --------------------
                               
ADMA01     JENSEN              
ADMA01     PETERSEN            
ADMA01     MORTENSEN           
ADMA01     MADSEN              
ADMA01     BUHL                
ADMA02     HERMANSEN           
ADMA02     PLOUG               
ADMA02     HANSEN              
                               
COMP01     HEURTEBISE          
COMP01     TANCHOU            

例 3 - AT BREAK による複数ブレイクレベルの指定

** Example 'ATBEX5S': AT BREAK (multiple break levels) (structured mode)
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 DEPT                                                                
  2 NAME                                                                
  2 LEAVE-DUE                                                           
1 #LEAVE-DUE-L (N4)                                                     
END-DEFINE                                                              
*                                                                       
LIMIT 5                                                                 
FIND EMPLOY-VIEW WITH CITY = 'PHILADELPHIA' OR = 'PITTSBURGH'           
                 SORTED BY CITY DEPT                                    
  MOVE LEAVE-DUE TO #LEAVE-DUE-L                                        
  DISPLAY CITY (IS=ON) DEPT (IS=ON) NAME #LEAVE-DUE-L                   
  /*                                                                    
 AT BREAK OF DEPT                                                      
    WRITE NOTITLE /                                                     
          T*DEPT OLD(DEPT) T*#LEAVE-DUE-L SUM(#LEAVE-DUE-L) / 
  END-BREAK                                                   
  AT BREAK OF CITY                                            
    WRITE NOTITLE                                             
          T*CITY OLD(CITY) T*#LEAVE-DUE-L SUM(#LEAVE-DUE-L) //
  END-BREAK
END-FIND                                                      
*                                                             
END

プログラム ATBEX5 の出力:

        CITY         DEPARTMENT         NAME         #LEAVE-DUE-L
                        CODE                                     
-------------------- ---------- -------------------- ------------
                                                                 
PHILADELPHIA         MGMT30     WOLF-TERROINE           11       
                                MACKARNESS              27       
                                                                 
                     MGMT30                             38       
                                                                 
                     TECH10     BUSH                    39       
                                NETTLEFOLDS             24       
                                                                 
                     TECH10                             63       
                                                                 
PHILADELPHIA                                           101       
                                                                 
                                                                 
PITTSBURGH           MGMT10     FLETCHER                34       
                                                                 
                     MGMT10                             34       
                                                                 
PITTSBURGH                                              34      

レポーティングモードの例については、ライブラリ SYSEXRM のプログラム ATBEX5R を参照してください。

Top of page