LIMIT

LIMIT n

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

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

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


関数

LIMIT ステートメントは、FINDREAD、または HISTOGRAM ステートメントで開始された処理ループの実行回数を制限するために使用します。

制限値は、他の LIMIT ステートメントで上書きされるまで、プログラム内の後続のすべての処理ループに有効となります。

LIMIT ステートメントは、制限値が明示されている個々のステートメント(例:FIND (n) ...)には適用されません。

制限値に達すると処理が終了し、メッセージが表示されます。また、処理ループが制限値を超えた場合の反応を決定するセッションパラメータ LE も参照してください。

LIMIT ステートメントの指定がなければ、Natural インストール時に Natural プロファイルパラメータ LT と一緒に定義されたデフォルトのグローバル制限が使用されます。

レコードのカウント

処理ループが制限に達したかどうかを確定するために、ループ内で読み込んだ各レコードを制限に対してカウントします。処理ループの制限には以下が適用されます。

  • FIND または READ ステートメントの WHERE 節で除かれたレコードは、制限数の対象にはなりません

  • ACCEPT/REJECT ステートメントで排除されたレコードは、制限数にカウントされます。

構文説明

構文要素 説明
LIMIT n
制限値の指定

制限値 n0 - 4294967295(リーディングゼロはオプション)の数値定数で指定します。

制限値がゼロであれば、処理ループに入りません。

例 1 - LIMIT ステートメント

** Example 'LMTEX1': LIMIT                                              
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 CITY                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 4                                                           
*                                                                       
READ EMPLOY-VIEW BY NAME STARTING FROM 'BAKER'                          
  DISPLAY NOTITLE                                                       
          NAME PERSONNEL-ID CITY *COUNTER                               
END-READ                                                                
*                                                                       
END

プログラム LMTEX1 の出力:

        NAME         PERSONNEL         CITY            CNT     
                        ID                                     
-------------------- --------- -------------------- -----------
                                                               
BAKER                20016700  OAK BROOK                      1
BAKER                30008042  DERBY                          2
BALBIN               60000110  BARCELONA                      3
BALL                 30021845  DERBY                          4

例 2 - LIMIT ステートメント(2 つのデータベースループに対して有効)

** Example 'LMTEX2': LIMIT (valid for two database loops)               
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 3                                                          
*                                                                       
FIND EMPLOY-VIEW WITH NAME > 'A'                                        
  READ EMPLOY-VIEW BY NAME STARTING FROM 'BAKER'                        
    DISPLAY NOTITLE 'CNT(0100)' *COUNTER(0100)                          
                    'CNT(0110)' *COUNTER(0110)                          
  END-READ                                                              
END-FIND                                                                
*                                                                       
END

プログラム LMTEX2 の出力:

 CNT(0100)   CNT(0110) 
----------- -----------
                       
          1           1
          1           2
          1           3
          2           1
          2           2
          2           3
          3           1
          3           2
          3           3