レコードバッファは、Adabas がデータを返したり、ユーザーが処理対象のデータを指定したりするためのストレージ内のエリアです。 レコードバッファが必要になる場合、対応するフォーマットバッファも必要になると見なされます。 フォーマットバッファを指定しないと、レコードバッファのペアとなるダミーのフォーマットバッファ(長さゼロ)が作成されます。 それぞれのタイプの ABD またはバッファ間の関係については、「バッファタイプ間の関係」を参照してください。
ACBX ダイレクトコールインタフェースを使用する場合、Adabas ダイレクトコールに複数のレコードバッファを指定できます。
レコードバッファは、主に読み込みコマンド、検索コマンド、更新コマンドで使用します。
読み込みコマンドの場合、フォーマットバッファに指定したフィールドの値がレコードバッファに返されます。 フィールド値はフォーマットバッファに指定した順に返されます。 フォーマットバッファとその対応するレコードバッファの一例を次に示します。
フォーマットバッファ |
AA,BB |
更新するフィールドの名前 |
---|---|---|
レコードバッファ |
value-AA value-BB |
ユーザーが指定したフィールド値 |
各値は、フォーマットバッファにユーザーが長さやフォーマットを指定しない限り、フィールドの標準の長さとフォーマットで返されます。 値が空値である場合は、フィールドのフォーマットに応じて次のように返されます。
フィールドタイプ | 空値の表現方法 |
---|---|
英数字(A) | 空白(16 進 '40')またはユーザーが指定したエンコード形式の空白 |
2 進数(B) | バイナリの 0(16 進数 X'00') |
固定小数点(F) | バイナリの 0(16 進数 X'00') |
浮動小数点(G) | バイナリの 0(16 進数 X'00') |
パック形式(P) | 符号付きパック 10 進数のゼロ(右端の下位バイトに、16 進 '00' に続けて、'0A'、'0B'、'0C'、'0D' または '0F') |
アンパック形式(U) | 符号付アンパック 10 進数のゼロ(右端の下位バイトに、X'F0' に続けて X'C0' または X'D0' を伴う) |
ワイド文字(W) | Unicode の空白(16 進 '20')またはユーザーが指定したエンコード形式の空白 |
注意:
NC/NN オプション付きフィールドの SQL コンパチブルな空値には、追加の空値と有意性(シグニフィカンス)インジケータが必要です。
詳細については、「レコードバッファでの SQL
空値インジケータの指定と読み込み」および「SQL
有意性(シグニフィカンス)インジケータ(S)」を参照してください。
Adabas は、要求されたすべてのフィールドの合計長(標準長または指定された長さ)に等しいバイト数を返します。
追加または更新コマンドの場合、フォーマットバッファに指定したフィールドの新しい値を、ユーザーがレコードバッファに指定します。
フォーマットバッファ |
XX,YY |
更新するフィールドの名前 |
---|---|---|
レコードバッファ |
値-XX 値-YY |
ユーザーが指定したフィールド値 |
レコードを更新するときは、レコードバッファに新しい値を指定する必要があります。 空値を指定する場合は、上記のフィールドフォーマットに応じて指定する必要があります。
レコードバッファは、次のコマンドでユーザープログラムと Adabas 間で情報を転送する際にも使用されます。
コマンド | 指定するデータ | 返されるデータ |
---|---|---|
OP | 更新するファイルおよび操作タイプ(ET、排他制御) | ユーザーデータ(オプション) |
LF | - | ファイルのフィールド定義 |
RE | - | システムファイルに格納されているユーザーデータ |
C5 | プロテクションログユーザーデータ | - |
ET/CL | ユーザーデータ(オプション) | - |
OP コマンドの場合、レコードバッファはユーザーのタイプおよび使用されるファイルを示します。
レコードバッファはユーザーデータ(OP、RE、CL、ET コマンド)に使用します。
このドキュメントでは、次のトピックについて説明します。
Adabas SQL Gateway(ACE)などの SQL をサポートするため、NC/NN(NOT COUNTED/NOT NULL は不可)オプションで定義したフィールドは、レコードバッファに 2 バイトのバイナリ空値インジケータがある SQL の有効空値となります。
値を入力または変更する場合や、値を読み込んでレコードバッファに返す場合、フィールドの "ゼロ" 値が有効なのか、それとも無意味な空値(未定義)なのかは、レコードバッファに指定された空値インジケータによって決まります。
値を指定したり読み込んだりするときは、次のことを同時に行う必要があります。
更新処理の場合、フォーマットバッファのフィールド指定に対応したレコードバッファ位置に空値インジケータを設定します。
読み込み処理の場合は、フォーマットバッファのフィールドの位置に対応したレコードバッファ位置に空値インジケータが返されたかどうか、プログラムで確認する必要があります。
空値インジケータは、データフォーマットにかかわらず、常に 2 バイトであり、固定小数点フォーマットです。
読み込み(Lx)または読み込みを伴う検索(フォーマットバッファエントリがある Sx)コマンドを実行すると、選択したフィールドに含まれている実際の値に応じて、次の空値インジケータ値のいずれかが返されます。
値 | 説明 |
---|---|
X'FFFF' | このフィールドの空値には意味がありません。 |
0000 | このフィールドの空値は有効な値、つまり、ゼロまたは空白です。 |
xxxx | フィールドは桁落としされました。 空値インジケータには、データベースレコードに格納されたとおりの値の全長(xxxx)が含まれています。 |
更新(Ax)または追加(Nx)コマンドの場合、レコードバッファの空値インジケータ値に次の値を設定する必要があります。
値 | 説明 |
---|---|
X'FFFF' | フィールド値を "未定義"、つまり無意味な空値に設定します。フィールドに設定されたバイナリの 0 または空白文字は、レコードバッファのフィールドの内容とは無関係です。 |
0000 | レコードバッファにまったく値が指定されていない場合や、バイナリの 0 や空白が指定されている場合でも、フィールドには有効な空値が含まれています。 |
追加コマンドの場合、NC オプション付きで定義されたフィールドに対し、レコードバッファにまったく値が提供されていなければ、そのフィールドは空値フィールドとして扱われます。 次の例は、NC オプション付きで定義された 2 バイトの Adabas バイナリフィールド AA の空値の表現方法を示しています。
フィールド定義:01,AA,2,B,NC
ゼロ以外の値を挿入する場合 | 空白を挿入する場合 | 空値を挿入する場合 | |
---|---|---|---|
レコードバッファの空値インジケータ | 0(バイナリの値に有意性あり) | 0(バイナリの空値に有意性あり) | FFFF(バイナリの空値に有意性なし) |
データ | 0005 | 0000(ゼロ) | 無関係 |
Adabas データベース内の内部表現 | 0205 | 0200 | C1 |
更新(A1/N1)コマンドの場合、NC オプション付きで定義されたフィールドの値は常に有効です。つまり、このフィールドは、空値インジケータ値 "0000" が(指定されていなくても)指定されているときと同様に扱われます。
読み込みコマンドの場合、NC オプション付きで定義されたフィールドに空値インジケータが指定されていなければ、レコードに有効な値が存在した場合にのみレコードバッファにフィールド値が返されます。 無意味なインジケータ値 FFFF が指定されているフィールドがデータストレージレコードに存在する場合、レコードが読み込まれるときにレスポンスコード 55 が返されます。
通常、LA オプションは可変長データとともに使用します。 LA オプションを使用する英数字フィールドの長さをレコードバッファに指定することもできます。 フィールド値の前に、2 バイトの長さフィールドが付加されます。長さフィールドには、値の長さに 2 を加算した値(つまり長さフィールドを含む長さ)が格納されます。
フォーマットバッファ |
AA, ... |
読み込むフィールドの名前 |
---|---|---|
レコードバッファ |
0005ABC ...または 2712 ...(10,000 characters)... |
Adabas から返されるフィールド値 |