バージョン 8.1.3
 —  コマンドリファレンス  —

プログラミング全般に関する考慮事項

このセクションでは、コールをプログラミングするときに考慮する必要のある概念について説明します。

内部 ID を指定すると、Adabas コマンドの実行時に重要な機能を実行できます。 Adabas ダイレクトコールコマンドのコントロールブロックで、次の ID を指定できます。

フォーマット ID の使用については、このセクションで詳しく説明します。

このセクションでは、これ以外に、Adabas ワークから ISN を取得するための手順、マルチフェッチオプション、およびプリフェッチオプションについても説明します。 マルチフェッチおよびプリフェッチオプションを使用すると、Adabas コールの完了に必要なシステムコマンドの数が減るため、大量のデータを順次処理するプログラムの実行時間を短縮できます。

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


コマンド ID、フォーマット ID、グローバルフォーマット ID

Adabas コントロールブロック(ACBCID または ACBXCID)に指定されているコマンド ID は、Adabas コマンド実行中に重要な機能を果たします。 コマンド ID は、自動生成されるか、またはユーザーが指定する空白でもゼロでもない値であり、次の機能を実行します。

必要に応じて、デコード結果のフォーマットバッファに固有の内部フォーマット ID を指定できます。 この値は、アディション 5 フィールドの先頭バイトの上位(左端)2 ビットにあるフラグで識別されます。 フォーマット ID は、フラグの値に応じて、ユーザー固有のもの(個別のフォーマット ID)にすることも、同じ Adabas ニュークリアスで実行している他のユーザーも使用可能なもの(グローバルフォーマット ID)にすることもできます。

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

コマンド ID、フォーマット ID、グローバルフォーマット ID の指定

次の表は、コマンド ID、フォーマット ID、およびグローバルフォーマット ID を指定するのに必要な Adabas コントロールブロック(ACB または ACBX)設定をまとめたものです。

ID ACB または ACBX フィールド指定
コマンド ID(ACBCID または ACBXCID) アディション 5(ACBADD5 または ACBXADD5)
コマンド ID このフィールドには空白でもゼロでもない値を指定してください。

X'FFFFFFFF' のコマンド ID 値を指定すると、X'00000001' から始まって 1 ずつ増加するコマンド ID が Adabas によって自動生成されます。

バイナリの "00" に設定される上位(左端)ビット
フォーマット ID このフィールドには空白でもゼロでもない値を指定してください。

X'FFFFFFFF' のコマンド ID 値を指定すると、X'00000001' から始まって 1 ずつ増加するコマンド ID が Adabas によって自動生成されます。

先頭バイトの上位(左端)2 ビットをバイナリの "10" に設定します。5~8 番目のバイトをフォーマット ID に設定します。 フォーマット ID を X'FE' および X'FF' で始めることはできません。

非メインフレーム Adabas 環境では、アディション 5 フィールドの先頭バイトを任意の小文字に設定します。

グローバルフォーマット ID このフィールドには空白でもゼロでもない値を指定してください。

X'FFFFFFFF' のコマンド ID 値を指定すると、X'00000001' から始まって 1 ずつ増加するコマンド ID が Adabas によって自動生成されます。

先頭バイトの上位(左端)2 ビットをバイナリの "11" に設定します。残りのバイトをグローバルフォーマット ID に設定します。 アディション 5 フィールドの 8 バイトはすべて、グローバルフォーマット ID として使用されます。

メインフレーム環境では、16 進の E2~E9(文字 S~Z)の範囲に先頭バイトを割り当てることができます。それ以外の範囲は、Software AG によって使用されるために予約されています。

非メインフレーム Adabas 環境では、16 進の 51~5A(文字 S~Z)の範囲に先頭バイトを割り当てることができます。

注意:

  1. アディション 5 フィールドの先頭バイトの上位(左端)2 ビットに B’00’ を設定すると、コマンド ID は自動的にフォーマット ID として使用されます。
  2. アディション 5 フィールドの先頭バイトの上位(左端)2 ビットに B’10’ を設定すると、コマンド ID とフォーマット ID に別々の値が使用され、アディション 5 フィールドの 5~8 バイトがフォーマット ID として使用されます。
  3. アディション 5 フィールドの先頭バイトの上位(左端)2 ビットに B'11' を設定すると、コマンド ID とフォーマット ID に別々の値が使用され、フォーマット ID はグローバルフォーマット ID となり、アディション 5 フィールドの 8 バイトはすべてグローバルフォーマット ID として使用されます。
  4. Adabas はグローバルフォーマット ID の割り当てを確認しません。 正当な範囲のグローバルフォーマット ID のみが割り当てられるようにするのは、ユーザーの責任です。 Software AG は、ユーザーに有効なグローバルフォーマット ID の範囲を拡張することも、グローバルフォーマット ID 割り当ての問題を解決するためにその製品に変更を行うこともできません。

読み込みシーケンシャルコマンドで使用するコマンド ID

読み込みシーケンシャルコマンド(L2/L3、L5/L6、L9)には、コマンド ID を指定する必要があります。 Adabas が正しい順序でユーザーにレコードを返すには、コマンド ID が必要です。 これらのコマンド ID は、シーケンシャルコマンドのテーブルに保持されます。

別のフォーマット ID を使用しない限り(「コマンド ID とフォーマット ID に別々の ID 値を使用」セクションを参照)、これらのコマンドで使用するコマンド ID 値も、内部フォーマットバッファプールに入力され、保持されます。 順次読み込み処理中にエンドオブファイル条件が検出されると、コマンド ID は解放されます。

読み込み、更新および検索コマンドで使用するコマンド ID およびフォーマット ID

読み込みコマンド(L1~L6、L9)および更新コマンド(A1/A4、N1/N2)では、読み込むフィールドまたは更新するフィールドを指定するフォーマットバッファが必要です。 このフォーマットバッファは、Adabas によって解釈され、内部フォーマットバッファに変換されます。 有効なコマンド ID を使用すると、同じフォーマットバッファを使用する一連のコマンドで解釈と変換が繰り返されるのを防ぐことができます。

読み込みコマンドまたは更新コマンドに有効なコマンド ID を指定すると、Adabas はそのコマンド ID が内部フォーマットバッファプールにあるかどうかチェックします。 コマンド ID がある場合、そのコマンド ID に対応する内部フォーマットバッファが使用されるため、フォーマットバッファを再度解釈する必要がなくなります。

注意:
同じフォーマットバッファを使用する一連のレコードを読み込んだり、更新したりする場合、コマンド ID を使用すると、読み込みコマンドや更新コマンドの処理時間を大幅に短縮できます。

L9 コマンドから生じた内部フォーマットバッファ(およびフォーマット ID)は、別の L9 コマンドでのみ使用できます。 また、L9 コマンドでは、L9 以外の内部フォーマットバッファ/フォーマット ID を使用することはできません。 このことは、グローバルフォーマットバッファ(およびグローバルフォーマット ID)と L9 コマンドについても言えます。

同じフィールドを読み込んで更新する場合(例えば、L5 の後に A1 が続く場合)、両コマンドに同じコマンド ID を使用することをお勧めします(読み込みと更新に同じフォーマットバッファを使用する場合の制限については、A1/A4 コマンドと N1/N2 コマンドの説明を参照)。

S1/S2/S4 コマンドで第 1 検索レコードを読み込むオプションを使用し、かつコマンド ID を指定すると、コマンド ID とそれに対応する内部フォーマットバッファも内部フォーマットバッファプールに格納されます。

内部フォーマットバッファプールが一杯になり、プールに存在しないコマンド ID のコマンドを受け取ると、Adabas はプール内で最も長く使用されていないエントリを新たに解釈されたフォーマット ID に置き換えます。 その後、削除したコマンド ID を使用するコマンドを受け取ると、そのコマンド ID 用に再度解釈されたフォーマットバッファが、プール内で次に長く使用されていないエントリと置き換えられます。 このため、フォーマットバッファは、同じコマンド ID を使用する一連の読み込みコマンドまたは更新コマンド間で変更しないでください。 なお、コマンド ID を使用しても、フォーマットバッファが再解釈されないことは保証されません。

コマンド ID とフォーマット ID に別々の ID 値を使用

コマンド ID とフォーマット ID に別々の値を使用できます。 アディション 5 フィールドの上位 2 ビットにバイナリの 00 を設定している限り、コマンド ID は自動的にフォーマット ID として使用されます。 しかし、アディション 5 フィールドの上位 2 ビットがバイナリの 10 であると、フィールドの 5~8 バイト(アディション 5+4(4))はフォーマット ID として使用されます。 ID を X’FE’ および X’FF’ で始めることはできません。

注意:
コマンド ID とは異なるフォーマット ID を識別するために、非メインフレーム Adabas 環境では、アディション 5 フィールドの先頭バイトは小文字であるとみなされます。 異種環境で別のフォーマット ID を使用するときは、システムで使用している全プラットフォームでもその ID を識別できることが重要です。

グローバルフォーマット ID の使用

オンライン環境で特にみられることですが、複数のユーザーが同じプログラムを使用して 1 つのファイルの同じフィールドを読み込み、更新し、フォーマットバッファも同じものを使用するということがよくあります。

グローバルフォーマット ID オプションを有効にするには、アディション 5 フィールドの先頭バイトの上位 2 ビットにバイナリの 11 を設定します(「コマンド ID、フォーマット ID、およびグローバルフォーマット ID の指定」を参照)。 これにより、アディション 5 の 8 バイトはすべて、グローバルフォーマット ID として認識されます。

注意:
フォーマット ID をグローバルとして識別するために、非メインフレーム Adabas 環境では、アディション 5 フィールドの先頭バイトは任意の数字か小文字であるとみなされます。 異種環境でグローバルフォーマット ID を使用するときは、システムで使用しているどのプラットフォームでもその ID を識別できることが重要です。

グローバルフォーマット ID の先頭バイトは、16 進の E2~E9(文字 S~Z)の範囲に割り当てることができます。 それ以外の範囲は、Software AG によって使用するために予約されています。

非メインフレーム Adabas 環境でグローバルフォーマット ID に許可されている値の範囲は、16 進の 51~5A(文字 S~Z)です。

注意:
Adabas はグローバルフォーマット ID の割り当てを確認しません。 正当な範囲のグローバルフォーマット ID のみが割り当てられるようにするのは、ユーザーの責任です。 Software AG は、ユーザーに有効なグローバルフォーマット ID の範囲を拡張することも、グローバルフォーマット ID 割り当ての問題を解決するためにその製品に変更を行うこともできません。

グローバルフォーマット ID を削除するには、RC コマンドを使用し、アディション 5 フィールドにそのグローバルフォーマット ID を指定します。

ISN リストで使用するコマンド ID

ISN リストを返すコマンド(S1、S2、S4、S5、S8、S9)にコマンド ID を指定した場合、後でそのコマンド ID 値を使用してリストを識別できます。

コマンド ID の自動生成

コマンド ID 値に X'FFFFFFFF' を指定すると、コマンド ID を自動的に生成できます。 これにより、X'00000001' から始まって 1 ずつ増加するコマンド ID が Adabas ニュークリアスによって自動生成されます。 ただし、コマンド ID の自動生成が望ましくないこともあります。詳細については、「読み込み、更新および検索コマンドで使用するコマンド/フォーマット ID」セクション参照してください。

コマンド ID の解放

コマンド ID とその関連エントリ(ISN リスト)を解放するには、RC コマンドまたは CL コマンドを使用します。この他、Sx コマンド(S1、S2、S4、S5、S8、S9)の CID 解放オプションで解放することもできます。

RC コマンドには、内部フォーマットバッファプール、シーケンシャルコマンドテーブル、または ISN リストテーブルにあるコマンド ID のみを解放するオプションがあります。

CL コマンドでは、そのユーザーに対して現在アクティブであるコマンド ID をすべて解放します。

Sx コマンドに CID 解放オプションを指定すると、まずコマンド ID を解放してからコマンド処理を実行します。

コマンド ID の内部識別

各コマンド ID エントリは、コマンド ID 値と 内部ユーザー ID で識別されます。 このため、他のユーザーが使用中のコマンド ID 値を意識する必要はありません。 ただし、同じコマンド ID 値を異なるコマンドで使用するのは避けてください。特に、L2/L5、L3/L6、L9 の各読み込みシーケンシャルコマンドと Sx コマンドでは同じコマンド ID を使用しないことをお勧めします。

コマンド ID の使用例

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

例 1:検索/読み込み処理

レコードセットを選択し、読み込みます。 読み込むレコードごとに同じフォーマットバッファを使用します。

FIND (S1)           CID=EX1A
READ (L1)           CID=EX1B
READ (L1)           CID=EX1B

例 2:GET NEXT オプションを使用した検索/読み込み処理

L1/L4 コマンドの GET NEXT オプションを使用してレコードセットを選択し、読み込みます。

FIND (S1)           CID=EX2A
READ (L1)           CID=EX2A
READ (L1)           CID=EX2A
READ (L1)           CID=EX2A

例 3:読み込み/更新処理

ファイルを順次読み込んで、更新します。 読み込みと更新で同じフォーマットバッファを使用します。

READ PHYS SEQ (L5)  CID=EX3A
UPDATE (A4)         CID=EX3A
READ PHYS SEQ (L5)  CID=EX3A
UPDATE (A4)         CID=EX3A

例 4:読み込み/検索処理

ファイルを論理順に読み込みます。 第 1 ファイルから読み込んだフィールドの値を使用して、第 2 ファイルに検索コマンドを発行します。次に、GET NEXT オプションを使用して、検索コマンドで取得したレコードを読み込みます。

READ LOG SEQ (L3)   CID=EX4A
FIND (S1)           CID=EX4B
READ (L1)           CID=EX4B
READ (L1)           CID=EX4B
READ LOG SEQ (L3)   CID=EX4A
FIND (S1)           CID=EX4B
READ (L1)           CID=EX4B

Top of page

ISN リスト処理

このセクションでは、Adabas WORK データセットから ISN を読み込む手順について説明します。 L1/L4 コマンドの GET NEXT オプションを使用して、ISN リスト中の ISN に対応するレコードを読み込む場合は、このセクションで説明する ISN 処理を Adabas が自動的に行うため、ユーザーがその手順を使用する必要はありません。

このセクションで使用する Sx コマンドとは、ISN リストを生成するコマンド(S1/S2/S4/S5/S8/S9)のことです。

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

ISN リストの格納

Adabas は次のいずれかの条件があてはまる場合、ISN を WORK データセットに格納します。

コマンド ID フィールドに空白かバイナリの 0 を指定して Sx コマンドを発行すると、Adabas は ISN を Adabas ワークに格納しません。

ISN リストの取得

Adabas WORK データセットに格納されている ISN を取得するには、最初の Sx コマンドに使用したのと同じコマンド ID 値を指定して Sx コマンドを発行します。 アクティブなコマンド ID 値を指定して Sx コマンドを発行すると、Adabas は既存の ISN リストに ISN を要求しているものとみなします。 Adabas は指定のコマンド ID で識別される ISN リストを探し出し、次の ISN グループを ISN バッファに入れます。 ISN バッファに入るだけの ISN が返されます。

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

SAVE ISN LIST オプションを指定した場合

ISN リストの作成に使用する Sx コマンドで SAVE ISN LIST オプションを指定した場合、Adabas は ISN 下限フィールドに指定された ISN を使用して次に返す ISN グループを判断します。

ISN 下限フィールドに指定された ISN より次に大きい ISN で始まるものが、次のグループになります。

S2 コマンドを使用して ISN リストを作成した場合、指定する ISN は ISN リストに存在している必要があります。 このように SAVE ISN LIST オプションを使用すると、ユーザーは ISN リスト内を前後にスキップできます。 このことは、画面を前後にスクロールする操作をプログラムで実現するのに役立ちます。

SAVE ISN LIST オプションを指定しなかった場合

ISN リストの作成に使用した Sx コマンドに SAVE ISN LIST オプションを指定しなかった場合、Adabas はリスト内の配置順で ISN を返します。Adabas ワークからの各 ISN グループをユーザーの ISN バッファに入力し終えると、Adabas はこの ISN リストを削除します。 リストの識別に使用されたコマンド ID も、ISN の最後のグループがユーザーに返されたときに解放されます。 この場合、指定した ISN 範囲を超えて処理が始まらない限り、ISN 下限フィールドは使用されません。

コントロールブロックの ISN 数フィールドの使用

コントロールブロック内の ISN 数フィールドを使用すると、ユーザーはリスト内の ISN の取得が完了した時点を判断できます。

ISN リスト処理例

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

例 1:GET NEXT オプションを指定した L1/L4 コマンドと Sx コマンドの併用

Sx command
L1/L4 command with 'GET NEXT' option
L1/L4 command with 'GET NEXT' option
L1/L4 command with 'GET NEXT' option

次の各例では、ISN バッファのサイズによって、さまざまな結果が得られることを示しています。 ISN リストの配置は ISN 下限で定義します。

  1. ISN Buffer Length = 0
    read the ISN list to the work area
  2. L1/L4 with GET NEXT
    result: first ISN's record 
  1. ISN Buffer Length = 4
    read first ISN with S1
  2. L1/L4 with GET NEXT
    result: second ISN's record
  1. ISN Buffer Length = 12
    read first ISN with S1
    first 3 ISNs are returned in ISN buffer
  2. L1/L4 with GET NEXT
    result: read fourth/fifth/sixth ISNs' records

例 2:SAVE ISN LIST オプションの使用

SAVE ISN LIST オプションを使用した最初の Sx コール

Command = Sx
Command ID = SX01               (save-ISN-list option)
Command Option 1 = H
ISN Lower Limit = 0
ISN Buffer Length = 20
CALL ADABAS ...

実行結果の ISN 数 = 7(格納リスト内の ISN の総数)

ISN 結果リスト:(ISN はすべてワークに格納されます)

8    12  14  15  24  31  33

実行結果の ISN バッファ:

8    12  14  15  24

後続の Sx コール

Command = Sx
Command ID = SX01
ISN Lower Limit = 24     (limit ISN choice to 24, +)
ISN Buffer Length = 20   (space for 5 ISNs from ISN list)
CALL ADABAS ...

実行結果の ISN 数 = 2(ISN バッファに返された ISN の総数)

実行結果の ISN バッファ:

31   33   14  15  24.... remainder of ISN buffer unchanged....

後続の Sx コール

Command = Sx
Command ID = SX01
ISN Lower Limit = 0
ISN Buffer Length = 20
CALL ADABAS ...

実行結果の ISN 数 = 7

実行結果の ISN バッファ:

8    12  14  15  24

例 3:ISN オーバーフローの取り扱い

最初の Sx コール(SAVE ISN LIST オプションは使用しない)

Command = Sx
Command ID = SX02
Command Option 1 = blank     (no option)
ISN Lower Limit = 0
ISN Buffer Length = 20
CALL ADABAS ...

実行結果の ISN 数 = 7(ISN バッファに返された ISN とワークに格納されている ISN の総数)

ISN 結果リスト:(ISN 31 と 33 のみがワークに格納されています)

8    12  14  15  24  31  33

実行結果の ISN バッファ:

8    12  14  15  24

後続の Sx コール

Command = Sx
Command ID = SX02
ISN Lower Limit     (not used)
ISN Buffer Length = 20
CALL ADABAS ...

実行結果の ISN 数 = 2

実行結果の ISN バッファ:

31   33   14   15  24

31 と 33 の ISN を Adabas ワークから削除し、コマンド ID SX02 を解放します。 最後の ISN がユーザーに返された後で SX02 が解放されたため、コマンド ID を SX02 とした後続の Sx コールは最初の Sx コールとして処理されます。

上記の例では ISN 下限を使用していませんが、ゼロ以外の値を指定すると、その値より大きい ISN のみを ISN バッファに返します(例 2 と同様)。

例 4:ISN オーバーフロー取り扱いなし

コマンド ID を空白かゼロとした最初の Sx コール

Command = Sx
Command ID = blanks or binary zeros
Command Option 1 = blank     (no option)
ISN Lower Limit = 0          (no lower limit specified)
ISN Buffer Length = 20
CALL ADABAS ...

実行結果の ISN 数 = 7(一致した ISN の総数)

ISN 結果リスト:ワークには何も格納されません。

8  12  14  15  24  31  33

実行結果の ISN バッファ:

8  12  14  15  24

後続の Sx コールでコマンド ID を空白かバイナリの 0、ISN 下限を 0 とすると、イニシャルコール時と同じ検索コマンドが再実行され、同じ結果が得られます。 後続のコールでコマンド ID を空白かバイナリの 0、ISN 下限を 24 とすると、Sx コマンドが再実行されます。 その結果、ISN 数=2 となり、ISN バッファには 31 と 33 の ISN が入ります。

Top of page

マルチフェッチ/プリフェッチ機能の使用

大量のデータを順次処理するプログラムは、頻繁にストレージにアクセスする必要があり、実行時間が長くなります。 Adabas マルチフェッチオプションとプリフェッチオプションは、Adabas コールの実行に必要なシステムコマンド数を減らして、このようなプログラムの実行時間を大幅に短縮します。

マルチフェッチオプションとプリフェッチオプションを使用すると、ほぼすべての標準アプリケーションで実行時間が短縮されます。ただし、具体的に得られるメリットはアプリケーションプログラムのタイプによって異なります。

注意:
Adabas 8 の ACBX インターフェイスコールでは、マルチフェッチ機能はサポートされますが、プリフェッチ機能はサポートされません。 ただし、ACB インターフェイスダイレクトコール用のプリフェッチ機能はサポートされています。したがって、アプリケーションに ACB インターフェイスダイレクトコールを使用している場合、これらのコールのみにプリフェッチ機能は、引き続き使用することができます。

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

マルチフェッチとプリフェッチの比較

マルチフェッチ機能とプリフェッチ機能は、アプリケーションプログラムと Adabas ニュークリアス間のコミュニケーションオーバーヘッドを削減します。 マルチフェッチ処理は、単一のコールで取得した複数のレコードを格納し、そのレコードをレコードバッファのユーザーに転送します。 マルチフェッチを使用しないと、これと同じ結果を得るには複数の Adabas コールが必要になります。 ACB インターフェイスダイレクトコールを実行すると、マルチフェッチしたレコードのレコードディスクリプタエレメント(RDE)が ISN バッファに格納されます。ACBX インターフェイスダイレクトコールを実行すると、マルチフェッチしたレコードのレコードディスクリプタエレメント(RDE)がマルチフェッチバッファに格納されます。

マルチフェッチ処理はプリフェッチに似ています。実際、マルチフェッチはプリフェッチ機能とその他の機能で構成されています。 Adabas 8 以前のリリースではプリフェッチ処理とマルチフェッチ処理のどちらもサポートしていますが、新規に作成するプログラムでは、どの Adabas プラットフォームでも機能が共通しているマルチフェッチ(M)オプションを使用することをお勧めします。 また、プリフェッチオプションは Adabas 8 以降のリリースではサポートされません。

マルチフェッチ/プリフェッチの起動

作成したアプリケーションで ACB インターフェイスダイレクトコールのみを使用している場合、プリフェッチ処理またはマルチフェッチ処理を呼び出すには 2 つの方法があります。 どちらの方法で呼び出すかは、処理するために先読みしたレコードが保管されている場所、およびどんなバッファスペースを割り当てる必要があるかによって決まります。

作成したアプリケーションで ACBX インターフェイスダイレクトコールを使用する場合、または ACB インターフェイスダイレクトコールと ACBX インターフェイスダイレクトコールを混在させる場合、マルチフェッチ処理を呼び出すには、L1/L4、L2/L5、L3/L6、L9、BT、または ET コマンドで M または O オプションを指定する必要があります。 コマンドレベルオプション M および O の使用については、各コマンドのドキュメントの他、「マルチフェッチ処理」を参照してください。

注意:
プリフェッチ処理は、ACBX インターフェイスダイレクトコールを使用するアプリケーションではサポートされません。

マルチフェッチ処理

マルチフェッチ処理は、非メインフレームプラットフォーム上の対応する処理と互換性があり、異機種環境の各種プラットフォームで使用できます。

マルチフェッチ処理は、次の Adabas コマンドで使用できます。

マルチフェッチは、どの読み出しコール(Lx)に指定した場合でも、ひとまとまりのレコードをレコードバッファに返し、これらのレコードの記述をコール元の ISN バッファ(ACB インターフェイスダイレクトコールの場合)またはコール元のマルチフェッチバッファ(ACBX インターフェイスダイレクトコールの場合)に返します。 レコードの最大数は次の値で制限されます。これらの値は、Adabas コントロールブロック(ACB または ACBX)のいずれか、または ABD に適宜指定されます。

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

読み込み(Lx)マルチフェッチ処理

読み込みコマンドのダイレクトコールを行うときにマルチフェッチ処理を使用する場合は、コールの前に次のようにフィールドを設定しておく必要があります。

設定内容 設定対象
ACB インターフェイスダイレクトコール ACBX インターフェイスダイレクトコール
ACB ACBX ABD
サポートされるコマンドタイプおよびオプション(「マルチフェッチ処理」セクションのコマンドリストを参照) コマンドコード(ACBCMD) コマンドコード(ACBXCMD) ---
返される値の最大数。すべての値をマルチフェッチする場合は 0 ISN 下限(ACBISL) ISN 下限(ACBXISL) ---
"M" または O に設定(次の注を参照) コマンドオプション 1(ACBCOP1) コマンドオプション 1(ACBXCOP1) ---
レコードバッファの長さ レコードバッファ長(ACBRBL) --- レコードバッファ ABD のバッファサイズ(ABDXSIZE)
ISN バッファの長さ ISN バッファ長(ACBIBL) --- ---
マルチフェッチバッファの長さ --- --- マルチフェッチバッファ ABD のバッファサイズ(ABDXSIZE)

注意:

  1. コマンドオプション M は、マルチフェッチオプションを使用することを示します。 コマンドオプション O は、L4/L5/L6 コマンドの場合、マルチフェッチオプション(M)と既存のコマンドオプション R(すでに別のユーザーがホールドしている ISN を要求するとレスポンスコード 145 が返される)の両方を選択します。
  2. L1 コマンドの場合は、マルチフェッチコマンドオプション M または O とともに、コマンドオプション I(ISN 順)または N(GET NEXT オプション)のどちらかを指定する必要があります。指定しないと、レスポンスコード 22 が発生します。

返されるレコードバッファと、ISN バッファまたはマルチフェッチバッファの内容は、次のとおりです。

Record Buffer: record1,record2, ... ,recordn

レコードは通常どおりにレコードバッファに返されます。 複数のレコードが返された場合、そのいずれのレコードもレコードバッファ内で隣接しています。

これらのレコードの記述は ISN バッファに返されます。 ISN バッファの最初のフルワードは、後続のエレメント数を示します(符号付き整数、4 バイト)。 このカウントの後に、16 バイトのレコードディスクリプタエレメントが続きます。

ISN or Multifetch Buffer: RDE count{RDE1 }...

レコードディスクリプタエレメント(RDE)の構造を次の表に示します。

フォーマット 長さ 内容
すべてのフィールドは符号なし、右詰 4 バイト レコードバッファ内のこのレコードの長さ。 レコードによって長さが異なることがあります。
4 バイト このレコードの Adabas レスポンス。 ゼロ以外のレスポンスの場合、レコードはレコードバッファに格納されません。
4 バイト このレコードの ISN。
4 バイト (L9 のみ)ISN 数:このディスクリプタの値のカウント

最初のレコードの処理中にエラーが検出されると、レスポンスコードが適切な Adabas コントロールブロック(ACBRSP または ACBXRSP)のレスポンスコードフィールドに返されます。

2 番目以降のレコードの処理中にエラーが検出されると、レスポンスコードが ISN バッファまたはマルチフェッチバッファの対応するレコードディスクリプタエレメントに返されます。

BT/ET のマルチフェッチ処理

Adabas はデフォルトでは、BT/ET コマンドを発行しているユーザーに対して現在ホールドされている ISN をすべて解放します。 マルチフェッチオプションを指定すると、現在のトランザクションでホールドされているレコードのサブセットのみが解放されます。 ACB ダイレクトコールインターフェイスを使用している場合、ホールド状態から解放されるレコードは ISN バッファに指定されます。ACBX ダイレクトコールインタフェースを使用している場合、ホールド状態から解放されるレコードはマルチフェッチバッファに指定されます。 ISN バッファまたはマルチフェッチバッファ内の最初のフルワードは、次の 8 バイトのエレメントの数になります。

コマンドレベルのマルチフェッチ機能を有効にするには、BT/ET コマンドコールの前に、Adabas コントロールブロックのフィールドに次の値を設定しておく必要があります。

ET コマンドまたは BT コマンドのダイレクトコールを行うときにマルチフェッチ処理を使用する場合は、コールの前に次のようにフィールドを設定しておく必要があります。

設定内容 設定対象
ACB インターフェイスダイレクトコール ACBX インターフェイスダイレクトコール
ACB ACBX ABD
"BT" または "ET" コマンドコード(ACBCMD) コマンドコード(ACBXCMD) ---
"M" コマンドオプション 1(ACBCOP1) コマンドオプション 1(ACBXCOP1) ---
ISN バッファの長さ ISN バッファ長(ACBIBL) --- ---
マルチフェッチバッファの長さ --- --- マルチフェッチバッファ ABD のバッファサイズ(ABDXSIZE)

注意:
ADARUN PREFETCH=YES でマルチフェッチを設定すると、ET/BT コマンドには "P" オプション(プリフェッチ)が自動的に使用されます。それ以外のコマンドには "M" オプション(マルチフェッチ)が自動的に使用されます。

ISN バッファまたはマルチフェッチバッファには、次の値が含まれている必要があります。

ISN  or Multifetch Buffer: ISN descriptor count {ISN descriptor element (See table below)} ...

ISN ディスクリプタエレメントの構造を次の表に示します。

フォーマット 長さ 内容
バイナリ、右詰 4 バイト Adabas ファイル番号
4 バイト ISN

プリフェッチ処理

プリフェッチは、ACB ダイレクトコールインターフェイスを使用してシーケンシャルコマンド(GET NEXT を指定した L1/L4、L2/L5、L3/L6、L9)をコールするプログラムで効果を発揮します。 ACBX ダイレクトコールでは使用できません。

プリフェッチを使用すると、一連の読み込みシーケンシャルコマンドが、1 回の Adabas コールで実行されます。 1 回のコールでデータベースから一度に複数のレコードを読み込みます。 この結果、リージョン間コミュニケーションのオーバーヘッドを大幅に削減し、ユーザープログラムと Adabas ニュークリアス処理をオーバーラップさせることができます。

注意:
ホールドオプション(L4/5/6 コマンド)を使用している場合、レコードがプリフェッチバッファエリアに読み込まれると、そのレコードはホールド状態になります。 つまり、全レコードの処理が完了する前に ET コマンドを発行すると、(未処理のレコードも含め)すべてのレコードが解放されます。 ET コマンドの ISN ホールドオプションまたは HI コマンドを使用すると、このようなレコードをホールド状態に戻すことができます。

プリフェッチオプション処理から特定のコマンドまたはファイルを除外するには、ADARUN PREFXFIL パラメータまたは PREFXCMD パラメータを使用して、除外するファイルまたはコマンドを指定します。

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

コマンドオプション "P" を指定したプリフェッチ処理の呼び出し

コマンド固有の P オプションを指定してプリフェッチを有効にすると、Adabas はユーザープログラム内に定義された ISN バッファを先読みレコード用の中間ストレージエリアとして使用します。 ISN バッファの各レコードには、16 バイトのヘッダーが付きます。

バイト 使用法
1~2 レコード長(長さの定義を含む) 長さ=ゼロはデータの終わりを示します。
3~4 ニュークリアスレスポンスコード
5~8 ニュークリアスの内部 ID(レスポンスコードがゼロでも 3 でもない場合、右端 2 バイトにサブコードが返されます)
9~12 レコードの ISN
13~16 ISN 数(L9 コマンドのみ)

最初のレコードは、Adabas によってレコードバッファに返されます(16 バイトのヘッダーなし)。 2 番目以降のレコードは、ユーザーが ISN バッファから取り出して処理する必要があります。 エンドオブファイルが発生した場合、ISN バッファの最後のレコードのヘッダーには Adabas レスポンスコード 3 が含まれ、2 バイトの終了文字にはバイナリの 0 が含まれています。

プリフェッチプログラミングのその他の考慮事項

プリフェッチオプションを使用する場合には、次の事項を考慮してください。

ISN Buffer Size for Prefetch Programming

プリフェッチ プログラムのためのISN バッファサイズ

プリフェッチまたはマルチフェッチしたレコードの ISN を変更した場合の影響

プリフェッチまたはマルチフェッチしたレコードを更新した場合、次の処理が適用されます。

重要:
ファイルでレコードを読み込んだり、検索したりしているときには、その同じファイル(特にアクセスされているディスクリプタ)を変更しないでください。

Top of page