このドキュメントでは、Adabas 8 になって、コマンド、ACB、および Adabas ダイレクトコールインターフェイスがどのように変更されたかについて説明します。 本書には、次のトピックが含まれています。
Adabas 8 では、新しい Adabas 8 拡張 Adabas コントロールブロック(ACBX)構造と Adabas バッファ記述(ABD)構造に基づくダイレクトコールインターフェイスが導入されました。
注意:
一部の Adabas 8 の新機能では、アプリケーションプログラムが ACBX ベースのダイレクトコールインターフェイスを使用する必要があります。 例えば、アプリケーションプログラムで大きな(32K を超える)バッファを使用すること、またはセグメント化したバッファ(複数のフォーマットバッファとレコードバッファ)を使用することは、Adabas 8 でサポートされている機能であり、ACBX ベースのダイレクトコールインターフェイスを使用する必要があります。
新しい ACBX ダイレクトコールの詳細については、「Adabas の呼び出し」を参照してください。 ACBX 構造および ABD の詳細については、「Adabas コントロールブロックの構造(ACB および ACBX)」および「Adabas バッファ記述(ABD)」を参照してください。
新しく拡張 Adabas コントロールブロック(ACBX)が導入され、Adabas コマンドのバッファサイズを大きくできるようになりました。 従来の拡張型でない Adabas コントロールブロック(ACB)も今までどおりサポートされており、現行のアプリケーションもそのままで動作しますが、Adabas 8 の拡張機能を使用する場合には、ACBX に切り替える必要があります。 特に、Adabas 8 の長い(32K を超える)バッファまたはセグメント化されたバッファ(フォーマットバッファとレコードバッファの複数ペア、またはフォーマット、レコードおよびマルチフェッチの 3 つのバッファの複数セット)機能を使用している場合、ACBX を使用する必要があります。
ACBX を使用しない場合は、お使いのアプリケーションプログラムは既存のダイレクトコールインターフェイス(ACB)を使用した Adabas コールと新しいインターフェイス(ACBX)を使用したコールを自由に切り替ることができます。
このセクションでは、次のトピックについて説明します。
Adabas でサポートされているコントロールブロック(構造と DSECT も含む)の詳細については、「Adabas コントロールブロックの構造(ACB および ACBX)」を参照してください。
すべてのアプリケーションプログラムは、ACB および ACBX のどちらのダイレクトコールも行えます。 コントロールブロック(ACB または ACBX)は、ACB または ACBX インターフェイスのどちらを使用しても、Adabas コールの最初のパラメータです。 Adabas 8 では、コントロールブロックのオフセット 2 に "F" という文字で始まる値があるかどうかによって、コール時にどちらのコントロールブロックが使用されるかが決まります。 ACB のオフセット 2 は、コマンドコードフィールド(ACBCMD)ですが、F という文字で始まる Adabas コマンドはないため、ACB を使用するダイレクトコールでは、オフセット 2 に "F" で始まる値は含まれません。 ACBX 内のオフセット 2 は、新しい ACBX を識別する新しいバージョンのフィールド(ACBXVER)です。
オフセット 2 上の "F" の有無により、Adabas 8 がダイレクトコールを解釈する方法が異なります。 オフセット 2 に "F" が指定されている場合、Adabas は、コントロールブロックと残りのダイレクトコールパラメータを ACBX コールとして解釈します。オフセット 2 に "F" が指定されていない場合、Adabas は、コントロールブロックと残りのダイレクトコールパラメータを ACB コールとして解釈します。 何らかの理由で残りのコントロールブロックフィールドおよびダイレクトコールパラメータが、オフセット 2 の "F" の有無により示されたコールのタイプに正しく指定されない場合は(ACB パラメータが ACBX コールに指定された場合など)、エラーとなるかコールの結果が予想どおりにならない場合があります。 新しい ACBX を使用してダイレクトコールを指定する方法については、「ダイレクトコールの変更点」を参照してください。
ACBX は多くの点で ACB と異なります。 ACBX に含まれているフィールドには ACB にない新しいものもあり、また一部の ACBX フィールドのサイズは ACB の該当フィールドよりも大きくなっています。 ACBX におけるこれらの拡張は、基本的な構造を長期間にわたって変更することなく将来行われる予定の Adabas への機能強化に対応できるように、ACBX 構造に十分な柔軟性を持たせるために行われました。
このセクションでは、ACB と ACBX の相違点について説明します。
新しい ACBX は長さが 192(X'C0')バイトですが、ACB の長さは 80 バイトです。
バッファ長フィールドは ACB に含まれていますが ACBX には含まれていません。 Adabas 8 では、バッファ長フィールドを各 Adabas バッファ記述(ABD)に指定します。 したがって ACBX には、ACB に含まれる ACBFBL、ACBIBL、ACBRBL、ACBSBL および ACBVBL に対応するバッファフィールドが含まれません。コールに関連付けられた ABD が代わりに使用されます。 1 つの ABD は、単独の Adabas バッファセグメントを表します。 詳細は、「Adabas バッファ記述」で説明しています。
ACBX では、コントロールブロックのコマンドオプションフィールド、アディションフィールド、および予約フィールドの数が次のように増えています。
ACBX には、8 個のコマンドオプションフィールドが含まれていますが、ACB では 2 個です。
ACBX には、6 個のアディションフィールドが含まれていますが、ACB では 5 個です。
ACBX には、4 個の予約フィールドが含まれていますが、ACB では 1 個です。
予約された ACBX フィールドはバイナリの 0 に設定する必要があります。予約された 4 フィールド(ACBXRSV4)は、バイナリの 0 に初期化する必要があり、常にその状態を保つようにします。
コマンドタイム(スレッドタイム)を計測する単位は ACB と ACBX で異なります。 ACB では、コマンドタイム(ACBCMDT)を 16 マイクロ秒単位で計測します。ACBX では、コマンドタイム(ACBXCMDT)を 1/4096 マイクロ秒単位で計測します。
ACBX では、多数のコントロールブロックフィールドが従来よりも長くなっています。 次の表は、これらの変更点を要約したものです。
フィールドタイトル | 長さ | |
---|---|---|
ACB | ACBX | |
ファイル番号 | 2 | 4 |
データベース ID | 2 | 4 |
ISN | 4 | 4 |
ISN 下限 | 4 | 4 |
ISN 数 | 4 | 4 |
圧縮レコード長 | 4 | 8 |
非圧縮レコード長 | 4 | 8 |
コマンドタイム | 4 | 8 |
ユーザーエリア | 4 | 16 |
フォーマットバッファ長 | 2 | 4(ABD 内) |
レコードバッファ長 | 2 | 4(ABD 内) |
サーチバッファ長 | 2 | 4(ABD 内) |
バリューバッファ長 | 2 | 4(ABD 内) |
ACBX に次のフィールドが新しく導入されました。
ACBX DSECT 名 | 説明 |
---|---|
ACBXADD6 | アディション 6 |
ACBXCOP3 | コマンドオプション 3 |
ACBXCOP4 | コマンドオプション 4 |
ACBXCOP5 | コマンドオプション 5 |
ACBXCOP6 | コマンドオプション 6 |
ACBXCOP7 | コマンドオプション 7 |
ACBXCOP8 | コマンドオプション 8 |
ACBXDBID | データベース ID です。 ACB では、データベース ID は X'30' コールではレスポンスコードフィールド(ACBRSP)内、その他の論理コールでは ACBFNR の 1 バイト目に格納されます。 |
ACBXERRA | バッファ内へのエラーオフセット(32 ビット)です。 |
ACBXERRB | エラー文字フィールド(フィールド名)です。 |
ACBXERRC | エラーサブコードです。 |
ACBXERRD | 複数のバッファが関連する場合のエラーバッファ ID です。 |
ACBXERRE | 複数のバッファが関連する場合のエラーバッファシーケンス番号です。 |
ACBXERRG | バッファ内へのエラーオフセット(64 ビット)です。このフィールドは現在サポートされていません。 |
ACBXLCMP | 圧縮レコード長(レコード全体が読み込まれていない場合はレコードの一部)です。 ACB では、圧縮レコード長はアディション 2 フィールド(ACBADD2)に格納されます。 |
ACBXLDEC | 非圧縮レコード長です。 ACB では、非圧縮レコード長はアディション 2 フィールド(ACBADD2)に格納されます。 |
ACBXLEN | ACBX の長さ(現在 192)です。 |
ACBXRSV2 | 予約済みです。 このフィールドの値はゼロに設定されている必要があります。 |
ACBXRSV3 | 予約済みです。 このフィールドの値はゼロに設定されている必要があります。 |
ACBXRSV4 | Adabas が使用するように予約済みです。 |
ACBXSUBR | Adabas アドオン製品により使用されるサブコンポーネントレスポンスコードです。 |
ACBXSUBS | Adabas アドオン製品により使用されるサブコンポーネントレスポンスサブコードです。 |
ACBXSUBT | Adabas アドオン製品により使用されるサブコンポーネントエラーテキストです。 |
ACBXVER | C'F2' に設定した場合、このフィールドは Adabas に新しい拡張 ACB(ACBX)が使用されていることを示します。 |
ACB フィールドはいろいろな用途で使用できましたが、次に示すように、ACBX では用途に応じて新しいフィールドに分割されました。
ACB では、X'30' コールのデータベース ID を格納するためにレスポンスコードフィールド(ACBRSP)が使用されます。 その他の論理コールの場合、1 バイトのデータベース ID は、ファイル番号フィールド(ACBFNR)の 1 バイト目に格納されていました。 ACBX では、この目的のためにデータベース ID フィールド(ACBXDBID)が提供されています。
ACB では、特定の Adabas レスポンスコードのエラー情報を保持するために ACBADD2 フィールドが使用されます。 ACBX では、エラー情報を保持するために、エラー情報フィールド(ACBXERR で始まる一連のフィールド)が新しく作成されました。
ACB では正常にコールを行うために、処理されたデータの圧縮および非圧縮レコード長を返すために ACBADD2 フィールドが使用されます。 ACBX では正常にコールを行うために、圧縮レコードフィールド(ACBXLCMP)に、Adabas により処理された圧縮データの長さが含まれます。また非圧縮レコードフィールド(ACBXLDEC)には、非圧縮データの長さが含まれます。
次の表に示すように、ACBX フィールドのオフセットおよびシーケンスは、対応する ACB フィールドとは全般的に異なります。 ACBX 構造の詳細については、「Adabas コントロールブロックの構造(ACB および ACBX)」を参照してください。
オフセット | ACB DSECT フィールド名 | ACBX DSECT フィールド名 |
---|---|---|
00 | ACBTYPE(コールタイプ) | ACBXTYPE(コールタイプ) |
01 | 予約 | ACBXRSV1(予約 1) |
02 | ACBCMD(コマンドコード) | ACBXVER(ACBX バージョンインジケータ) |
04 | ACBCID(コマンド ID) | ACBXLEN(ACBX 長) |
06 | (ACBCID の続き) | ACBXCMD(コマンドコード) |
08 | ACBFNR(ファイル番号) | ACBXRSV2(予約 2) |
0A | ACBRSP(レスポンスコード -- X'30' コールでデータベース ID に使用される) | ACBXRSP(レスポンスコード) |
0C | ACBISN(ISN) | ACBXCID(コマンド ID) |
10 | ACBISL(ISN 下限) | ACBXDBID(データベース ID) |
14 | ACBISQ(ISN 数) | ACBXFNR(ファイル番号) |
18 | ACBFBL(フォーマットバッファ長) | ACBXISNG(8 バイト ISN) |
1A | ACBRBL(レコードバッファ長) | (ACBXISNG の続き) |
1C | ACBSBL(サーチバッファ長) | ACBXISN(ISN -- ACBXISNG に含まれる) |
1E | ACBVBL(バリューバッファ長) | (ACBXISN および ACBXISNG の続き) |
20 | ACBIBL(ISN バッファ長) | ACBXISLG(8 バイト ISN 下限) |
22 | ACBCOP1(コマンドオプション 1) | (ACBXISLG の続き) |
23 | ACBCOP2(コマンドオプション 2) | (ACBXISLG の続き) |
24 | ACBADD1(アディション 1) | ACBXISL(ISN 下限 -- ACBXISLG に含まれる) |
28 | (ACBADD1 の続き) | ACBXISQG(8 バイト ISN 数) |
2C | ACBADD2(アディション 2) | ACBXISQ(ISN 数 -- ACBXISQG に含まれる) |
30 | ACBADD3(アディション 3) | ACBXCOP1(コマンドオプション 1) |
31 | (ACBADD3 の続き) | ACBXCOP2(コマンドオプション 2) |
32 | (ACBADD3 の続き) | ACBXCOP3(コマンドオプション 3) |
33 | (ACBADD3 の続き) | ACBXCOP4(コマンドオプション 4) |
34 | (ACBADD3 の続き) | ACBXCOP5(コマンドオプション 5) |
35 | (ACBADD3 の続き) | ACBXCOP6(コマンドオプション 6) |
36 | (ACBADD3 の続き) | ACBXCOP7(コマンドオプション 7) |
37 | (ACBADD3 の続き) | ACBXCOP8(コマンドオプション 8) |
38 | ACBADD4(アディション 4) | ACBXADD1(アディション 1) |
40 | ACBADD5(アディション 5) | ACBXADD2(アディション 2) |
44 | (ACBADD5 の続き) | ACBXADD3(アディション 3) |
48 | ACBCMDT(コマンドタイム) | (ACBXADD3 の続き) |
4C | ACBUSER(ユーザーエリア) | ACBXADD4(アディション 4) |
54 | --- | ACBXADD5(アディション 5) |
5C | --- | ACBXADD6(アディション 6) |
64 | --- | ACBXRSV3(予約 3) |
68 | --- | ACBXERRG(バッファ内のエラーオフセット、64 ビット -- 現在サポートされていません) |
6C | --- | ACBXERRA(バッファ内のエラーオフセット、32 ビット) |
70 | --- | ACBXERRB(エラー文字フィールド) |
72 | --- | ACBXERRC(エラーサブコード) |
74 | --- | ACBXERRD(エラーバッファ ID) |
75 | --- | ACBXERRE(エラーバッファシーケンス番号) |
78 | --- | ACBXSUBR(サブコンポーネントレスポンスコード) |
7A | --- | ACBXSUBS(サブコンポーネントレスポンスサブコード) |
7C | --- | ACBXSUBT(サブコンポーネントエラーテキスト) |
80 | --- | ACBXLCMP(圧縮レコード長) |
88 | --- | ACBXLDEC(非圧縮レコード長) |
90 | --- | ACBXCMDT(コマンドタイム) |
98 | --- | ACBXUSER(ユーザーエリア) |
A8 | --- | ACBXRSV4(予約 4) |
Adabas 8 では ACBX インターフェイスを使用すると、バッファのセグメント化(フォーマットバッファとレコードバッファの複数ペア、またはフォーマット、レコードおよびマルチフェッチの 3 つのバッファの複数セット)できるため、バッファの総数は固定ではなくなり、制限もなくなりました。 個別のバッファは ACBX のフィールド自身により記述されなくなりました(ACB ではバッファ長は ACB で定義されます)。その代わり、各バッファは独自の Adabas バッファ記述(ABD)構造を持ちます。ABD には、バッファの種類、場所、サイズ、およびその他の関連情報が記述されます。
ACBX を使用して ABD のアドレスを Adabas へのダイレクトコールに指定することができます。 このセクションでは、ABD の構造について説明します。
Adabas 8 では、次の 8 種類のバッファについて ABD を定義できます。
フォーマットバッファ
レコードバッファ
マルチフェッチバッファ
サーチバッファ
バリューバッファ
ISN バッファ
パフォーマンスバッファ(Adabas Review で使用)
ユーザーバッファ
各 Adabas バッファセグメントは単一の ABD で表されますが、同一のプログラムで 1 つの種類に対して複数の ADB を定義できます。 各 ABD のオフセット 4(ABDID)は、ABD で定義されたバッファの種類を識別します。
ABD(構造も含む)の詳細については、「Adabas バッファ記述(ABD)」を参照してください。
Adabas 8 では、フォーマットバッファとフォーマットバッファ指定が次のように変更されました。
新しいフォーマットバッファインジータ(L)を使用して、LB フィールド値またはロング英数字(LA)フィールド値の実際の長さを取得したり、指定したりできるようになりました。 このフォーマットバッファエレメントは、長さインジケータと呼ばれます。
バッファのデータが 32 K より大きくても、Adabas コマンドに指定できるようになりました。
英数字フィールドとワイド文字フィールドに対してフォーマットバッファ内で指定できるフィールド長は、253 バイトから 2,147,483,647 バイトまで拡張されました。
ACBX インターフェイスを使用して Adabas のフォーマットバッファ、レコードバッファ、およびマルチフェッチバッファを Adabas ダイレクトコールに指定すると、これらのバッファは複数のセグメントに分割されるため、ストレージ内に確保される領域が連続している必要はなくなりました。
フォーマットバッファでラージオブジェクト(LB)フィールドがサポートされるようになりました。 これに伴い、フィールド長にゼロを指定したり、アスタリスク(*)を使ったフィールド長表記を指定したりできるようになりました。 LB フィールドに対するフォーマットバッファのサポートについては、「LB フィールドでサポートされるフォーマットバッファ」を参照してください。
Adabas 8 の拡張 MU/PE 制限を使ったファイルについては、2 バイトのオカレンスカウント値(例えば FB='MUC,2,B.')を処理できるように、オカレンスカウントのフォーマットバッファ要素を調整(例えば FB='MUC.')する必要があります。
このセクションでは、次のトピックについて説明します。
新しいフォーマットバッファインジータ(L)を使用して、LA または LB フィールド値の実際の長さを取得したり、指定したりできるようになりました。 このフォーマットバッファエレメントは、長さインジケータと呼ばれます。
注意:
現在、長さインジケータは、LA または LB フィールドのフォーマットバッファ指定にのみ使用できます。
他のフィールドにおける長さインジケータの使用のサポートは、Adabas の今後のリリースで導入される予定です。
長さインジケータは、フィールド名に続いて文字 L
を使用して指定します。例えば、FB='ACL,4,B.'
と指定すると、AC フィールドの長さが返されます。
フィールドがマルチプルバリューフィールドであるか、ピリオディックグループ内にある場合は、フィールド名および文字 L
の後に関連するオカレンスインデックスが続きます。例えば、FB='ACL2,4,B.'
と指定すると、マルチプルバリューフィールド
AC の 2 番目の値が返されます。 圧縮フィールド長は、4 バイトのバイナリ形式で返されます。 他の長さおよび形式は指定できません。
このセクションでは、次のトピックについて説明します。
長さインジケータを MU または PE フィールドで使用する場合、オカレンスインデックスを指定する必要があります。オカレンスインデックスの範囲を指定することもできます。 ただし、1-N オカレンスインデックスは指定できません。 以下に例を示します。
次の例では、ピリオディックグループフィールド AC の 2 番目のオカレンスの 5 個目の値の長さが返されます。
FB='ACL2(5).'
次の例では、マルチプルバリューフィールド AC の最初の 10 個の値の長さが返されます。
FB='ACL1-10.'
1-N 表記は MU または PE フィールドの長さインジケータでは許可されていないため、次の例は正しくありません。
FB='ACL1-N.'
長さインジケータはオカレンスインデックスを持たない MU フィールドをサポートしないため、次の例も正しくありません。
FB='MCL.'
また、MU または PE フィールドの同一のフォーマットバッファ内で、長さインジケータとアスタリスク長さ表記による値の要求を組み合わせる場合、値の要求には長さの要求に対応する範囲を使用する必要があります。 長さの要求と値の要求は同一のフォーマットバッファセグメントでも、異なるフォーマットバッファセグメントのどちらで指定しても構いません。 例として、XX が、MU オプション付きの LA または LB フィールドである場合を以下に示します。
次の有効な例では、XX フィールドの最初の 2 個の値の長さと実際の値を要求しています。
FB='XXL1-2,XX1-2,*.'
FB='XXL1,XXL2,XX1,*,XX2,*.'
次の無効な例では、XX フィールドの最初の 2 個の値の長さと実際の値を要求しようとしています。 ただしこの例では、MU フィールドに対して長さの要求に指定した範囲と、値の要求に指定した範囲が、対応する形式で指定されて異なため、無効となります。
FB='XXL1,XXL2,XX1-2,*.'
FB='XXL1-2,XX1,*,XX2,*.'
次の 2 つのフォーマットバッファは、XX フィールドの 3 番目および 4 番目の値の長さとその実際の値を要求しています。
FB='XXL3,XXL4.'
FB='XX3,*,XX4,*.'
次の無効なフォーマットバッファは、XX フィールドの 3 番目および 4 番目の値の長さとその実際の値を要求していますが、長さの要求に指定した範囲と、対応する形式で指定されていないため、エラーになります。
FB='XXL3,XXL4.'
FB='XX3-4,*.'
読み込みコマンドのフォーマットバッファ内のフィールドに長さインジケータを指定する場合、レコードバッファにフィールド値を格納するために必要なバイト数(パディングがなく、長さに関する情報を含まないバイト数)が、レコードバッファ内の対応するフィールド位置に返されます。 レコードバッファに必要なスペースは、フィールドフォーマット、データベース、ファイルおよびユーザーの UES に関連する定義により異なります。
同一のフォーマットバッファ内で、LA または LB
フィールドの長さを取得する長さインジケータを指定する際に、そのフィールドの基本フォーマットと異なる(変換された)フォーマットで、実際のフィールド値を要求することはできません。
例えば、文字の LB フィールド L1 がフォーマット A で格納されている場合、フォーマットバッファ指定
FB='L1L,4,B,L1,*,W.'
は、L1 フィールドの長さの要求に加え、Unicode(フォーマット W)に変換された
L1 フィールドの値を要求しているため、正しくありません。
長さ要素はフィールドの長さをフィールド固有のフォーマットで指定しますが、要求されたフォーマット(Unicode)で返される値の長さが変換により異なるため、このような制限があります。
文字 LB フィールド L1(フォーマット A)が 40,000 バイトの EBCDIC 値を含んでいる場合を次の例に示します。
L1 のフォーマットバッファ指定が次のようであると仮定します。
FB='L1L,4,B.'
レコードバッファには、4 バイトバイナリ長の L1 フィールドの値が含まれます。
X'00009C40'
L1 のフォーマットバッファ指定が次のようであると仮定します。
FB='L1L,4,B,L1,*,A.'
レコードバッファには 4 バイトバイナリ長の L1 フィールドの値がレコードバッファエリアの先頭に含まれ、次に、40,000 文字の実際の L1 データが含まれます。
フォーマットバッファ内のフィールドが、対応する長さインジケータを使用して指定されていて(例えば FB='L1L,
4,B,L1.'
など)、フィールドが空白圧縮の対象外(NB オプションが FDT
内のフィールドに指定されている)の場合、返される長さは、値が格納されたときに指定されたバイト数となります。
ただし、フィールドが空白圧縮の対象となっている場合、返される長さは左端から意味を持つバイト数のみが返され、それ以上の値は空白で埋められます。
フォーマットバッファ内のフィールドが、対応する長さインジケータを使用して指定されていて(例えば FB='L1L,
4,B,L1.'
など)、フィールドが空値省略(FDT 内でこのフィールドに NB
オプションが指定されている)でフィールド値が完全に空白の場合、返されるフィールド値の長さはゼロになります。フィールドが空値省略ではない場合、返されるフィールド値の長さは、1
つの空白の長さ(英数字フィールドで 1 バイト、ワイド文字フィールドで 2 バイト)になります。
更新コマンドのフォーマットバッファに長さインジケータが指定されている場合、レコードバッファの対応する値がレコードバッファ内のフィールドの実際の値の長さを表します。 基本フィールドの長さインジケータ 1 個のみが指定でき、このインジケータはフォーマットバッファでアスタリスク(*)表記を伴う必要があります。
長さインジケータは、レコードバッファに可変長を指定するどのフォーマット要素(アスタリスク表記または長さゼロ表記による)より先にフォーマットバッファセグメント内で出現する必要があります。 つまり、長さインジケータの場所は常に同じで、このフォーマットで指定されるどのフィールドの値からも影響を受けません。
ACBX インターフェイスを使用して Adabas のフォーマットバッファ、レコードバッファ、およびマルチフェッチバッファを Adabas ダイレクトコールに指定すると、これらのバッファは複数のセグメントに分割されるため、ストレージ内に確保される領域が連続している必要はなくなりました。 サーチバッファ、バリューバッファ、ISN バッファ、モニタバッファ、ユーザー情報バッファはそれぞれ、旧リリースと同様に個別のセグメントに指定する必要があります。
ACBX の Adabas ダイレクトコールでは、複数セグメントのフォーマットバッファに次のルールが適用されます。
複数のフォーマットバッファとレコードバッファは、通常、対になります。 レコードバッファ内のデータを、フォーマットバッファ内のフォーマット指定では記述していないコマンドの場合は、フォーマットバッファセグメントの指定は必要ありません。指定した場合は無視されます。
マルチフェッチ機能を使用すると、1 回の Adabas コールで複数のレコードを読み込むことができます。 マルチフェッチ機能を使用する場合、フォーマット、レコード、およびマルチフェッチの各バッファセグメントを 3 つ 1 組で指定する必要があります。
各フォーマットバッファセグメントは、以前のリリースと同様に、ピリオドで終了し、単独のフォーマットバッファとして完結した有効なものである必要があります。
フォーマット ID をコールに指定した場合は、そのコールは該当するすべてのフォーマットバッファセグメントに関連付けられます。 後続のコールでも類似したフォーマットバッファ(バッファセグメントのシーケンスを含む)を指定する場合、そのコールに別のフォーマット ID を指定するか、またはそのフォーマット ID をいったん解放してから以前に使用したフォーマット ID を再定義する必要があります。
Adabas ダイレクトコールにバッファまたはバッファセグメントのシーケンスを指定する方法は、次に示すように、コマンドのタイプによって異なります。
ACBX の後には、ゼロ個以上のフォーマットバッファセグメント(通常はレコードバッファセグメントと同じ数)、同じ数のマルチフェッチバッファセグメント(マルチフェッチ機能を使ったコールの場合)が続きます。
レコードバッファ内のデータを、フォーマットバッファ内のフォーマット指定では記述していないコマンドの場合は、フォーマットバッファセグメントの指定は必要ありません。指定した場合は無視されます。
Adabas コマンドのタイプによっては、サーチバッファセグメント、バリューバッファセグメント、または ISN バッファセグメントが 1 つ、その後に続きます。
コールの最後には、0~1 個のパフォーマンスバッファセグメント、または 0~1 個のユーザー情報バッファセグメントを 1 つ付加することができます。
コマンドオプション 2 に "S" を設定して LF コマンドを実行したときに、ラージオブジェクト(LB)フィールドが検出されると、LB フィールドの状態が F タイプのフィールドエレメントに返されます。 第 2 フォーマットバイト(エレメントのオフセット 7 またはバイト 8)のビット 6 が、このフィールドに LB(ラージオブジェクト)オプションが設定されたことを示すために設定されました。 さらに、第 2 フォーマットバイトのビット 1 は、LB フィールドが、NB オプション付きで定義されているかどうかを示します。 詳細については、『Adabas コマンドリファレンス』の LF コマンドに関する記述を参照してください。