HISTOGRAM

HISTOGRAM

ALL
(operand1)

[MULTI-FETCH-clause] [multi-fetch-factor] [IN] [FILE] view-name
  [PASSWORD=operand2]

[IN]

ASCENDING
DESCENDING
VARIABLEoperand3
DYNAMICoperand3

[SEQUENCE]

  [VALUE] [FOR] [FIELD] operand4
  [STARTING/ENDING-clause]
  [WHERElogical-condition]
   statement
END-HISTOGRAM (ストラクチャードモードのみ)
LOOP (レポーティングモードのみ)

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

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

関連ステートメント: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 DATA | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE

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


関数

HISTOGRAM ステートメントは、ディスクリプタ、サブディスクリプタ、またはスーパーディスクリプタとして定義されているデータベースフィールドの値を読むために使用します。値は Adabas インバーテッドリストから直接読み取られます。HISTOGRAM ステートメントは、処理ループを開始します。ただし、HISTOGRAM ステートメントで定義したフィールド以外のフィールドを参照することはできません。

プログラミングガイド』の次のセクションも参照してください。

注意:
SQL データベースの場合:HISTOGRAM は特定の列に同じ値を持つ行の数を返します。

制限

  • XML データベースでは、このステートメントを使用できません。

  • Entire System Server では、このステートメントを使用できません。

構文説明

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

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S           N P I   B *             ×
operand2 C S       A                         ×
operand3   S       A                         ×
operand4   S       A   N P I F B D T L       × ×

* operand1 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

構文要素 説明
operand1 / ALL
ディスクリプタ値の数:

HISTOGRAM ステートメントで operand1 を指定することで処理するディスクリプタ値の数は、数値定数(0 - 4294967295)またはユーザー定義変数(整数値を含む)を指定して制限できます。

ALL は全ディスクリプタ値が処理されるように強調するためにオプションとして指定できます。

このステートメントでは、指定した制限が、LIMIT ステートメントで設定した制限より優先されます。

LT パラメータで、より小さな制限が設定された場合、LT 制限が適用されます。

注意:
4 桁の件数を処理する場合、リーディングゼロ (0nnnn) を指定します。これは、Natural が、カッコで囲まれた 4 桁の数をすべてステートメントの参照番号と解釈するためです。operand1 は、HISTOGRAM ループに入るときに評価されます。operand1 の値が HISTOGRAM ループ内で変更されても、その値は処理する値の数に影響しません。

MULTI-FETCH-clause
MULTI-FETCH 節:

以下の「MULTI-FETCH 節」を参照してください。

view-name
ビュー名:

view-name として、DEFINE DATA ステートメント内、またはグローバルデータエリアやローカルデータエリアで定義したビューの名前を指定します。

ビュー内には HISTOGRAM ステートメントで使用するフィールドだけを指定します(operand4)。

ビューのフィールドが、添字範囲付きで定義されたピリオディックグループフィールドまたはマルチプルバリューフィールドの場合、その範囲の最初のオカレンスだけが HISTOGRAM ステートメントで参照されます。他のすべてのオカレンスは HISTOGRAM ステートメントの実行には関連しません。

レポーティングモードでは、DEFINE DATA LOCAL ステートメントが使用されていない場合、DDM の名前は view-name です。

PASSWORD=operand2
PASSWORD 節:

パスワードで保護された Adabas ファイルを検索する場合は、PASSWORD 節にパスワード(operand2)を指定します。詳細については、ステートメント FIND および PASSW を参照してください。

SEQUENCE
SEQUENCE 節:

この節は、Adabas、SQL データベースに対してだけ使用できます。

この節を使用して、レコードを昇順または降順のどちらで読み取るかを指定できます。

  • デフォルトは昇順です。昇順はキーワード ASCENDING を使用して明示的に指定することもできます。

  • レコードを降順で読み取る場合は、キーワード DESCENDING を指定します。

  • レコードを昇順または降順のどちらで読み取るかを事前に決めずに実行時に決めるには、変数(operand3)の前に VARIABLE キーワードまたは DYNAMIC キーワードを指定します。operand3 は、フォーマット/長さ A1 で、値 A("昇順")または D("降順")が含まれている必要があります。

    • キーワード VARIABLE を使用した場合、読み取り順(operand3 の値)は、HISTOGRAM 処理ループの開始時に評価され、HISTOGRAM ループ内で operand3 フィールドが変更されるかどうかに関係なく、ループが終了するまで変わりません。

    • キーワード DYNAMIC が指定された場合、HISTOGRAM 処理ループ内でレコードを取得する前に読み込み順(operand3 の値)が評価されます。あるレコードからレコードまで読み込み順を変更することが可能です。これは、HISTOGRAM ループの任意の場所で昇順から降順(または、逆)へのスクロール順の変更を可能にします。

SEQUENCE 節の例:

operand4
ディスクリプタ:

operand4 として、ディスクリプタ、サブディスクリプタ、スーパーディスクリプタ、またはハイパーディスクリプタが指定できます。

ピリオディックグループに含まれるディスクリプタをインデックス付きまたはなしで指定できます。インデックスなしで指定した場合、ディスクリプタは指定した値がいずれかのオカレンスに見つかった場合に選択されます。インデックス付きで指定した場合、レコードは値がインデックスで指定したオカレンス内に見つかった場合にのみ選択されます。インデックスは定数で指定する必要があります。インデックス範囲は使用できません。

MU のディスクリプタでは、インデックスを指定しないでください。値の位置に関係なく、値がレコードに存在していればディスクリプタは選択されます。

STARTING-ENDING-clause
STARTING/ENDING 節:

開始値と終了値は、キーワード STARTING および ENDING(または THRU)の後に、処理を開始/終了する値を示す定数またはユーザー定義変数を続けて指定できます。

詳細については、以下の「Starting/Ending 値の指定」を参照してください。

WHERE logical-condition
WHERE 節:

WHERE 節は、追加の選択条件(logical-condition)を指定するために使用できます。この条件は、値が読み取られた、値に対する処理が実行されるに評価されます(AT BREAK 評価を含む)。

WHERE 節で指定するディスクリプタは、HISTOGRAM ステートメントで参照したディスクリプタと同じにする必要があります。HISTOGRAM ステートメントでは、他のフィールドに対する処理を行うことができません。

logical-condition の構文については、『プログラミングガイド』の「論理条件基準」で説明しています。

END-HISTOGRAM
HISTOGRAM ステートメントの終了:

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

レポーティングモードの場合、Natural のステートメント LOOP を使用して HISTOGRAM ステートメントを終了させる必要があります。

LOOP

MULTI-FETCH 節

注意:
この節は、Adabas データベースでのみ使用できます。

MULTI-FETCH

ON
OFF
[OF] multi-fetch-factor

注意:
[MULTI-FETCH OF multi-fetch-factor] は、データベースタイプ ADA および ADA2 に対して評価されません。デフォルト処理モードが適用されます(プロファイルパラメータ MFSET を参照)。MULTI-FETCH 節は、データベースタイプ ADA2, で使用しても完全に無視されます(『コンフィグレーションユーティリティ』ドキュメントの「データベース管理システムの割り当て」を参照)。

詳細については、『プログラミングガイド』の「MULTI-FETCH 節」(Adabas)

Starting/Ending 値の指定

開始値と終了値は、キーワード STARTING および ENDING(または THRU)の後に、処理を開始/終了する値を示す定数またはユーザー定義変数を続けて指定できます。

指定された開始値が存在しない場合は、次に高い値が開始値として使用されます。高い値がまったくないときは、HISTOGRAM ループ内に入りません。

終了値を指定すると、終了値までの(終了値を含む)値が読まれます。

フォーマットが A または B のディスクリプタに対しては、開始値および終了値として 16 進定数を指定できます。

構文オプション 1:

[STARTING]

WITH
FROM

[VALUES] operand5

 

THRU

operand6

ENDING AT

構文オプション 2:

[STARTING]

WITH
FROM

[VALUES] operand5 TO operand6

構文オプション 3:

../graphics/cbo14.gif

<

../graphics/cbc14.gif

operand5
LT
LESS THAN
>
GT
GREATER THAN
<=
LE
LESS EQUAL
>=
GE
GREATER EQUAL

注意:
図 3 の比較演算子を使用した場合は、オプション ENDING ATTHRUTO は使用できません。これらの比較演算子は READ ステートメントにも有効です。

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

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand5 C S       A U N P I F B D T L       ×
operand6 C S       A U N P I F B D T L       ×

構文要素の説明:

構文要素 説明
STARTING FROM ... ENDING AT |TO
STARTING FROM 節/ENDING AT 節:

STARTING FROM 節および ENDING AT 節は、ユーザー指定の値の範囲に読み取りを制限するために使用します。

STARTING FROM 節(=EQEQUAL TO、または [STARTING] FROM))は、読み取り操作の開始値を決めます。開始値を指定すると、指定した値から読み取りが始まります。開始値が存在しない場合は、次に高い(または DESCENDING 読み込みでは低い)値が返されます。より高い(または DESCENDING ではより低い)値が存在しなければ、HISTOGRAM ループに入りません。

値を終了値に制限するには、包括的な範囲を示す用語 THRUENDING AT、または TO を持つ ENDING AT 節を指定できます。ディスクリプタフィールドが終了値を超えると、自動的なループ終了が実行されます。TOTHRUENDING AT キーワードの基本機能は、非常によく似ていますが、内部的に動作が異なります。

THRU | ENDING AT
THRU/ENDING AT オプション:

THRU または ENDING AT を使用した場合、開始値だけがデータベースに供給され、データベースによって値が返された後に、Natural ランタイムシステムによって終了値のチェックが実行されます。

THRU および ENDING AT オプションは、HISTOGRAM ステートメントをサポートするすべてのデータベースに対して使用することができます。

TO
範囲:

キーワード TO を使用すると、開始値と終了値の両方がデータベースに送られ、Natural は値の範囲をチェックしません。終了値を超えると、データベースは"ファイルの終わり"に到達した場合と同様の方法で対処し、データベースループを終了します。データベースにより完全な範囲チェックが行われるので、ASCENDING または DESCENDING のいずれの順序でブラウズしていても、常に範囲の小さい方の値が開始値になり、大きい方の値が終了値になります。

注意:
READ/HISTOGRAMTHRU/ENDING AT の結果は、Natural とアクセスされたデータベースが別のプラットフォーム上にあり、照合順序が異なる場合、READ/HISTOGRAMTO の結果とは異なる可能性があります。

HISTOGRAM で使用可能なシステム変数

Natural システム変数 *ISN*NUMBER および *COUNTERHISTOGRAM ステートメントで使用できます。

*NUMBER および *ISN は、WHERE 節の評価後に設定されます。これらを WHERE 節の論理条件に使用しないでください。

システム変数 説明
*NUMBER

システム変数 *NUMBER には、最後に読まれた値のデータベースレコード件数が入ります。

SQL データベースについては、『システム変数』ドキュメントの「SQL データベースに対する *NUMBER」を参照してください。

*ISN

システム変数 *ISN には、最後に読まれたディスクリプタ値を持つ、オカレンス番号が入ります。*ISN は、PE に属さないディスクリプタに対しては常に 0 を返します。

*ISN は、SQL データベースでは使用できません。

*COUNTER システム変数 *COUNTER には、読まれた値の個数の合計が入ります(WHERE 節の評価後)。

例 1 - HISTOGRAM ステートメント

** Example 'HSTEX1S': HISTOGRAM (structured mode)                       
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 8                                                                 
HISTOGRAM EMPLOY-VIEW CITY STARTING FROM 'M'                  
  DISPLAY NOTITLE                                                       
          CITY 'NUMBER OF/PERSONS' *NUMBER *COUNTER                     
END-HISTOGRAM                                                      
*                                                                       
END

プログラム HSTEX1S の出力:

        CITY          NUMBER OF     CNT     
                       PERSONS              
-------------------- ----------- -----------
                                            
MADISON                        3           1
MADRID                        41           2
MAILLY LE CAMP                 1           3
MAMERS                         1           4
MANSFIELD                      4           5
MARSEILLE                      2           6
MATLOCK                        1           7
MELBOURNE                      2           8

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

例 2 - 降順レコード読み取りによる HISTOGRAM ステートメント

** Example 'HSTDSCND': HISTOGRAM (with DESCENDING)                     
***********************************************************************
DEFINE DATA LOCAL                                                      
1 EMPL VIEW OF EMPLOYEES                                               
  2 NAME                                                               
END-DEFINE                                                             
*                                                                      
HISTOGRAM (10) EMPL IN DESCENDING SEQUENCE FOR NAME FROM 'ZZZ' 
  DISPLAY NAME *NUMBER                                                 
END-HISTOGRAM                                                   
END

プログラム HSTDSCND の出力:

Page      1                                                  05-01-13  13:41:03
                                                                               
        NAME            NMBR                                                   
-------------------- -----------                                               
                                                                               
ZINN                           1                                               
YOT                            1                                               
YNCLAN                         1                                               
YATES                          1                                               
YALCIN                         1                                               
YACKX-COLTEAU                  1                                               
XOLIN                          1                                               
WYLLIS                         2                                               
WULFRING                       1                                               
WRIGHT                         1

例 3 - 変数順序を使用した HISTOGRAM ステートメント

** Example 'HSTVSEQ': HISTOGRAM (with VARIABLE SEQUENCE)               
***********************************************************************
DEFINE DATA LOCAL                                                      
1 EMPL VIEW OF EMPLOYEES                                               
  2 NAME                                                               
*                                                                      
1 #DIR      (A1)                                                       
1 #STARTVAL (A20)                                                      
END-DEFINE                                                             
*                                                                      
SET KEY PF3 PF7 PF8                                                    
*                                                                      
MOVE 'ADKINSON' TO #STARTVAL                                           
*                                                                      
HISTOGRAM (9) EMPL FOR NAME FROM #STARTVAL                             
  WRITE NAME *NUMBER                                                   
  IF *COUNTER = 5                                                      
    MOVE NAME TO #STARTVAL                                             
  END-IF                                                               
END-HISTOGRAM                                             
*                                                         
#DIR := 'A'                                               
*                                                         
REPEAT                                                    
  HISTOGRAM EMPL IN VARIABLE #DIR SEQUENCE                
            FOR NAME FROM #STARTVAL                       
    MOVE NAME TO #STARTVAL                                
    INPUT NO ERASE  (IP=OFF AD=O)                         
          15/01 NAME *NUMBER                              
          //   'Direction:' #DIR                          
          //   'Press PF3 to stop'                        
          /    '      PF7 to go step back'                
          /    '      PF8 to go step forward'             
          /    '      ENTER to continue in that direction'
    /*                                                    
    IF *PF-KEY = 'PF7' AND #DIR = 'A'                     
      MOVE 'D' TO #DIR                                    
      ESCAPE BOTTOM                                       
    END-IF                           
    IF *PF-KEY = 'PF8' AND #DIR = 'D'
      MOVE 'A' TO #DIR               
      ESCAPE BOTTOM                  
    END-IF                           
    IF *PF-KEY = 'PF3'               
      STOP                           
    END-IF                           
  END-HISTOGRAM                      
  /*                                 
  IF *COUNTER(0250) = 0              
    STOP                             
  END-IF                             
END-REPEAT                           
END

プログラム HSTVSEQ の出力:

Page      1                                                  05-01-13  13:50:31
                                                                               
ADKINSON                       8                                               
AECKERLE                       1                                               
AFANASSIEV                     2                                               
AHL                            1                                               
AKROYD                         1                                               
ALEMAN                         1                                               
ALESTIA                        1                                               
ALEXANDER                      5                                               
ALLEGRE                        1                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
MORE

Enter キーを押した後:

Page      1                                                  05-01-13  13:50:31
                                                                               
ADKINSON                       8                                               
AECKERLE                       1                                               
AFANASSIEV                     2                                               
AHL                            1                                               
AKROYD                         1                                               
ALEMAN                         1                                               
ALESTIA                        1                                               
ALEXANDER                      5                                               
ALLEGRE                        1                                               
                                                                               
                                                                               
                                                                               
AKROYD                         1                                               
                                                                               
Direction: A                                                                   
                                                                               
Press PF3 to stop                                                              
      PF7 to go step back                                                      
      PF8 to go step forward                                                   
      ENTER to continue in that direction