L2 コマンドと L5 コマンドは、データストレージ内で物理的に並んでいる順にレコードを読み込みます。
このドキュメントでは、次のトピックについて説明します。
L5 コマンドは L2 コマンドと同じ機能を持ちます。ただし、さらに各レコードをホールド状態にします。 読み込んでホールドするレコードが現在他のユーザーにホールドされている場合は、レコードが使用可能になるまで待機状態になります。 コマンドオプション 1 フィールドに "R" を指定して L5 コマンドを発行した場合、レコードが使用可能でないと、レスポンスコード 145 が返されます。
L2 コマンドと L5 コマンドでは、論理的な順序でレコードを読み込みません。ただし、レコードが最初から特別な論理的順序でロードされ、この順序を変更するようなファイル更新が行われていない場合は、その限りでありません。
L2 コマンドと L5 コマンドは、アソシエータにアクセスする必要がないため(ただし、L3 コマンドでは必要)、最適な速度でファイル全体を読み込むことができます。全物理ブロックが順番に読み込まれます。
読み込むファイルと、値を取得する各レコード内のフィールドを指定します。 そのフィールドをフォーマットバッファに指定します。 レコードバッファには、要求されたフィールド値が返されます。
マルチフェッチ/プリフェッチ オプションを指定すると、複数のシーケンシャルレコードへの事前アクセスが可能になるため、処理全体の時間が短くなり、単一レコードをフェッチする時間が必要なくなります。 マルチフェッチまたはプリフェッチを使用可能にするには、コマンドオプション 1 フィールドに "M"、"O"(マルチフェッチ)、または "P"(プリフェッチ)を指定します。 詳細は、「マルチフェッチ/プリフェッチ機能の使用」を参照してください。
COMPRESSED オプション(フォーマットバッファに "C." を指定することで設定)を使用すると、読み込んだレコードが Adabas 内部に格納する圧縮形式で返されます。
このセクションでは、L2 コマンドおよび L5 コマンドの ACB インターフェイスダイレクトコールについて説明します。 本書には、次のトピックが含まれています。
ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。
フィールド | 位置 | フォーマット | Adabas コール前 | Adabas コール後 |
---|---|---|---|---|
1~2 | -- | -- | -- | |
コマンドコード | 3~4 | 英数字 | F | U |
コマンド ID | 5~8 | 英数字 | F | U |
ファイル番号 | 9~10 | バイナリ | F | U |
レスポンスコード | 11~12 | バイナリ | -- | A |
ISN | 13~16 | バイナリ | F | A |
ISN 下限 | 17~20 | バイナリ | F | U |
21~24 | -- | -- | -- | |
フォーマットバッファ長 | 25~26 | バイナリ | F | U |
レコードバッファ長 | 27~28 | バイナリ | F | U |
29~32 | -- | -- | -- | |
ISN バッファ長* | 33~34 | バイナリ | F | U |
コマンドオプション 1 | 35 | 英数字 | F | U |
36~44 | -- | -- | -- | |
アディション 2 | 45~48 | バイナリ/バイナリ | -- | A |
アディション 3 | 49~56 | 英数字 | F | A |
アディション 4 | 57~64 | 英数字 | F | A |
アディション 5 | 65~72 | 英数字 | F | U |
コマンドタイム | 73~76 | バイナリ | -- | A |
ユーザーエリア | 77~80 | -- | -- | U |
バッファ | Adabas コール前 | Adabas コール後 |
---|---|---|
フォーマット | F** | U |
レコード | -- | A |
ISN * | F | U |
上記の意味は次に示すとおりです。
F | Adabas コール前にユーザーが入力するフィールド |
A | Adabas により入力されるフィールド |
U | Adabas コール後も変化なし |
* | ISN バッファおよび長さは、マルチフェッチオプションまたはプリフェッチオプションを指定した場合にのみ必須です。 |
** | 圧縮オプション制御文字 C を含めることができます。 |
-- | 未使用 |
ダイレクトコールが開始される前に、未使用の ACB フィールドにバイナリの 0 を設定することをお勧めします。
L2 または L5
このフィールドには、空白およびゼロを除く値を指定する必要があります。 Adabas が正しい物理順でレコードを返し、フォーマットバッファを繰り返し解釈するのを避けるために使用されます。 この値は、ファイルの順次読み込み処理中は変更しないでください。
このフィールドの第 1 バイトには 16 進数 'FF' にセットしないでください。
コマンド ID 値が X'FFFFFFFF' の場合、自動的にコマンド ID が生成されます。 この場合 Adabas ニュークリアスは X'00000001' から始まるコマンド ID 値を生成し、L1 または L5 コールごとに値を 1 ずつ増加します。 ユーザー定義コマンド ID を指定する場合、ユーザーは各コマンド ID を固有のものにする必要があります。
別のフォーマット ID およびグローバルフォーマット ID の使用については、アディション 5 フィールドを参照してください。
読み込むファイルの番号を 2 進数で指定します。 物理ダイレクトコールの場合は、次のようファイル番号を指定します。
1 バイトファイル番号の場合は、ファイル番号を第 2 バイト(10)に入力します。第 1 バイト(9)は、バイナリの 0(B'0000 0000')をセットします。
2 バイトファイル番号の場合は、2 バイト(9 と 10)を使います。
注意:
2 バイトファイル番号およびデータベース ID を使用する場合は、コントロールブロックの先頭バイトに X'30'
を入力しなければなりません。
Adabas はこのフィールドに、コマンドのレスポンスコードを返します。 レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。 ゼロ以外のレスポンスコードは、アディション 2 フィールドの下位 2 バイトにサブコードを伴う場合があります。詳細は『Adabas メッセージおよびコード』を参照してください。
レスポンスコード 3 は、エンドオブファイル(EOF)条件が検出されたことを示します。
このフィールドを最初の L2 または L5 コールの前にゼロに設定すると、ファイルの第 1 物理ブロック内の第 1 レコードから順次読み込みが開始されます。
このフィールドを最初の L2 または L5 コールの前に ISN 値に設定すると、指定された ISN のレコードに対して物理的に直後にあるレコードから順次読み込みが開始されます。 指定 ISN はファイル中に存在している必要ありあます。
ユーザーは、最初の L2 または L5 コールの後にこのフィールドを修正する必要はありません。 読み込んだレコードの ISN がこのフィールドに返されます。
コマンドオプション 1 フィールドに "M" または "O"(マルチフェッチオプション)を指定した場合、このフィールドのゼロ以外の値によって、マルチフェッチする最大レコード数が特定されます。 このフィールドの値がゼロの場合は、マルチフェッチ対象のレコード数はレコードバッファと ISN バッファの長さによって制限されます。 詳細は、「マルチフェッチ/プリフェッチ オプション使用」を参照してください。
フォーマットバッファ長(バイト単位)。 ユーザープログラムに定義するフォーマットバッファエリアは、この指定長と同じか、それ以上でなければなりません。 コマンドオプション 1 フィールドにマルチフェッチオプション M または O を指定した場合、この値は 32 KB 未満である必要があります。
レコードバッファ長(バイト単位)。 ユーザープログラムに定義するレコードバッファエリアは、この指定長と同じか、それ以上でなければなりません。 コマンドオプション 1 フィールドにマルチフェッチオプション M または O を指定した場合、この値は 32 KB 未満である必要があります。
ISN バッファ長(バイト単位)。 ユーザープログラムに定義する ISN バッファエリアは、この指定長と同じ大きさか、それ以上である必要があります。
単一レコードのフェッチに必要な時間を少なくしてパフォーマンスを改善するには、コマンドのマルチフェッチ処理またはプリフェッチ処理を可能にするオプション M、O、または P を設定してください。 詳細は、「マルチフェッチ/プリフェッチ機能の使用」を参照してください。
オプション | 説明 |
---|---|
M | マルチフェッチを可能にします。 |
O | 以下に説明するように "R" オプション付きでマルチフェッチを使用します。 |
P | プリフェッチを使用します。 |
R(リターン) | L5 コマンドによる読み込みおよびホールド対象のレコードが使用可能でない場合に、レスポンスコード 145 を返します。 |
コマンドが正常に処理されると、次の情報がこのフィールドに返されます。
少なくとも 1 つの有効なフィールド値がレコードバッファにある場合、先頭 2 バイトには、アクセスしたレコードの圧縮レコード長がバイナリ形式で格納されます。
後ろ 2 バイトには、フォーマットバッファで選択し、アクセスしたフィールドの非圧縮長がバイナリ形式で格納されます。
注意:
プリフェッチ機能の使用時、この長さ情報は返されません。
L2 コマンドまたは L5 コマンドによってゼロ以外のレスポンスコードが返された場合、下位 2 バイトには、正確なレスポンスコードの意味を定義するサブコードが含まれていることがあります。 レスポンスコードとサブコードについては、『Adabas メッセージおよびコード』を参照してください。
このフィールドには、Adabas Security または Adabas SAF Security パスワードを指定します。 データベース、ファイル、またはフィールドがセキュリティ保護されている場合は、ユーザーは該当するセキュリティパスワードを指定する必要があります。 パスワードを保護するために、コマンド処理時にアディション 3 フィールドに空白がセットされます。
このフィールドは、サイファコードを指定するために使用します。 ファイルを暗号化する場合は、有効なサイファコードを指定する必要があります。 ファイルを暗号化しない場合は、このフィールドに空白をセットする必要があります。
Adabas は、コマンド処理時に、サイファコードに空白をセットし、バージョンコードとデータベース ID をフィールドの下位 3 バイトに返します。 詳細については「コントロールブロックフィールド」を参照してください。
このフィールドには、このコマンド用の内部フォーマットバッファを識別する別のフォーマット ID を指定するか、グローバルフォーマット ID を指定します。
アディション 5 フィールドで 1 バイト目の上位(左端)ビットに 1 が設定されていない場合、コマンド ID フィールドに指定された値がフォーマット ID として使用されます。
このビットに 1 がセットされていると、アディション 5 フィールドの 5 バイト目から 8 バイト目までがフォーマット ID として使用されます。
さらに、アディション 5 フィールドの第 1 バイトの最上位(左端)2 ビットに、1(B'11')がセットされると、アディション 5 フィールドの全 8 バイトが、グローバルフォーマット ID として使用されます(つまり、複数ユーザーがこのフォーマット ID を同時に使用できます)。
詳細と例については、「コマンド ID、フォーマット ID、グローバルフォーマット ID」を参照してください。
ファイル 2 を物理順に読み込みます。 各レコードの全フィールド値が返されます。
コマンドコード | L2 | |
---|---|---|
コマンド ID | EXL2 | 空白以外の CID が要求されます。 |
ファイル番号 | 2 | |
ISN | 0 | 全レコードを読み込みます |
フォーマットバッファ長 | 3 | またはそれ以上 |
レコードバッファ長 | 49 | またはそれ以上 |
コマンドオプション 1 | b | RETURN オプションを使用しません。 |
アディション 3 | パスワード | ファイル 2 はセキュリティ保護されています。 |
アディション 4 | bbbbbbbb(空白) | ファイルは暗号化されない |
フォーマットバッファ | RG |
---|
L2 コールを繰り返して各レコードを取得します。 ISN フィールドをコール間で修正する必要はありません。
ファイル 2 を物理順に読み込みます。 フィールド RA、XA、および XB(3 バイトのアンパック)の値を返します。 読み込んだ各レコードは、更新のためホールド状態になります。
コマンドコード | L5 | |
---|---|---|
コマンド ID | EXL5 | 空白以外の CID が要求されます。 |
ファイル番号 | 2 | |
ISN | 0 | 全レコードを読み込みます |
フォーマットバッファ長 | 13 | またはそれ以上 |
レコードバッファ長 | 21 | またはそれ以上 |
コマンドオプション 1 | b | レスポンスコード 145 オプション使用しません |
アディション 3 | パスワード | ファイル 2 はセキュリティ保護されています。 |
アディション 4 | bbbbbbbb(空白) | ファイル 2 は暗号化されていません |
フォーマットバッファ | RA,XA,XB,3,U |
---|
L5 コールを繰り返して各レコードを取得します。 ISN フィールドを L5 コール間で修正する必要はありません。
論理トランザクションを終了し、ホールドしたレコードを解放するため、ET ロジックユーザーは ET コマンドを発行します。 非 ET ユーザーは、A4、E4、または RI コマンドを発行して、ホールドしたレコードを解放します。
このセクションでは、L2 コマンドおよび L5 コマンドの ACBX インターフェイスダイレクトコールについて説明します。 本書には、次のトピックが含まれています。
ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。
フィールド | 位置 | フォーマット | Adabas コール前 | Adabas コール後 |
---|---|---|---|---|
1~2 | --- | --- | --- | |
バージョンインジケータ | 3~4 | バイナリ | F | U |
5~6 | --- | --- | --- | |
コマンドコード | 7~8 | 英数字 | F | U |
9~10 | --- | --- | --- | |
レスポンスコード | 11~12 | バイナリ | --- | A |
コマンド ID | 13~16 | 英数字/バイナリ | F | U |
データベース ID | 17~20 | 数値 | F | U |
ファイル番号 | 21~24 | 数値 | F | U |
25~28 | --- | --- | --- | |
ISN | 29~32 | バイナリ | F | A |
33~36 | --- | --- | --- | |
ISN 下限 | 37~40 | バイナリ | F | U |
41~48 | --- | --- | --- | |
コマンドオプション 1 | 49 | 英数字 | F | U |
50~64 | --- | --- | --- | |
アディション 2 | 65~68 | バイナリ | --- | A |
アディション 3 | 69~76 | 英数字/バイナリ | F | A |
アディション 4 | 77~84 | 英数字 | F | A |
アディション 5 | 85~92 | 英数字/バイナリ | F | U |
93~114 | --- | --- | --- | |
エラーサブコード | 115~116 | バイナリ | --- | A |
117~144 | --- | --- | --- | |
コマンドタイム | 145~152 | バイナリ | --- | A |
ユーザーエリア | 153~168 | 該当なし | --- | U |
--- | 169~193 | 操作不可 | --- | --- |
ABD とバッファ | Adabas コール前 | Adabas コール後 |
---|---|---|
フォーマット | F** | U |
レコード | -- | A |
マルチフェッチ * | F | U |
上記の意味は次に示すとおりです。
F | Adabas コール前にユーザーが入力するフィールド |
A | Adabas により入力されるフィールド |
U | Adabas コール後も変化なし |
* | マルチフェッチバッファは、マルチフェッチオプションを指定した場合にのみ必須です。 |
** | 圧縮オプション制御文字 "C" を含んでもかまいません。 |
--- | 未使用 |
ダイレクトコールが開始される前に、未使用の ACBX フィールドにバイナリの 0 を設定することをお勧めします。
F2
L2 または L5
Adabas はこのフィールドに、コマンドのレスポンスコードを返します。 レスポンスコード 0 は、このコマンドが正しく実行されたことを示します。 ゼロ以外のレスポンスコードは、エラーサブコード(ACBXERRC)フィールドにサブコードを伴う場合があります。詳細は、Adabas メッセージおよびコード のドキュメントを参照してください。
レスポンスコード 3 は、エンドオブファイル(EOF)条件が検出されたことを示します。
このフィールドには、空白およびゼロを除く値を指定する必要があります。 Adabas が正しい物理順でレコードを返し、フォーマットバッファを繰り返し解釈するのを避けるために使用されます。 この値は、ファイルの順次読み込み処理中は変更しないでください。
このフィールドの第 1 バイトには 16 進数 'FF' にセットしないでください。
コマンド ID 値が X'FFFFFFFF' の場合、自動的にコマンド ID が生成されます。 この場合 Adabas ニュークリアスは X'00000001' から始まるコマンド ID 値を生成し、L1 または L5 コールごとに値を 1 ずつ増加します。 ユーザー定義コマンド ID を指定する場合、ユーザーは各コマンド ID を固有のものにする必要があります。
別のフォーマット ID およびグローバルフォーマット ID の使用については、アディション 5 フィールドを参照してください。
このフィールドを使用して、データベース ID を指定します。 Adabas コールはこのデータベースに送られます。
このフィールドは 4 バイトのバイナリフィールドですが、現時点では 2 バイトのデータベース ID のみがサポートされています。 したがって、データベース ID はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。
このフィールドがバイナリの 0 に設定されている場合は、Adabas API は DDCARD 入力データで指定された ADARUN カードのデータベース ID か、リンクされているかリンクルーチンによりロードされた LNKGBLS モジュールで指定されているデフォルトのデータベース ID 値のいずれかを使用します。
このフィールドを使用して、Adabas コールで送る必要のあるファイル数を指定します。
このフィールドは 4 バイトのバイナリフィールドですが、ファイル番号はフィールドの下位部分(右端のバイト)に指定し、その前にバイナリの 0 を付加する必要があります。
このフィールドを最初の L2 または L5 コールの前にゼロに設定すると、ファイルの第 1 物理ブロック内の第 1 レコードから順次読み込みが開始されます。
このフィールドを最初の L2 または L5 コールの前に ISN 値に設定すると、指定された ISN のレコードに対して物理的に直後にあるレコードから順次読み込みが開始されます。 指定 ISN はファイル中に存在している必要ありあます。
ユーザーは、最初の L2 または L5 コールの後にこのフィールドを修正する必要はありません。 読み込んだレコードの ISN がこのフィールドに返されます。
ACBXISN フィールドは、8 バイトの ACBXISNG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISNG フィールドの上位部分には、バイナリの 0 を設定します。
コマンドオプション 1 フィールドに "M" または "O"(マルチフェッチオプション)を指定した場合、このフィールドのゼロ以外の値によって、マルチフェッチする最大レコード数が特定されます。 この値がゼロであれば、マルチフェッチするレコード数はレコードバッファとマルチフェッチバッファの長さによって制限されます。 詳細は、「マルチフェッチ/プリフェッチ機能の使用」を参照してください。
ACBXISL フィールドは、8 バイトの ACBXISLG フィールドに埋め込まれた 4 バイトのバイナリフィールドで、まだ使用されていません。 ACBXISLG フィールドの上位部分には、バイナリの 0 を設定します。
単一レコードのフェッチに必要な時間を少なくしてパフォーマンスを改善するには、コマンドのマルチフェッチ処理またはプリフェッチ処理を可能にするオプション M、O、または P を設定してください。 詳細は、「マルチフェッチ/プリフェッチ機能の使用」を参照してください。
オプション | 説明 |
---|---|
M | マルチフェッチを可能にします。 |
O | 以下に説明するように "R" オプション付きでマルチフェッチを使用可能にします。 |
R(リターン) | L5 コマンドによる読み込みおよびホールド対象のレコードが使用可能でない場合に、レスポンスコード 145 を返します。 |
コマンドが正常に処理されると、次の情報がこのフィールドに返されます。
少なくとも 1 つの有効なフィールド値がレコードバッファにある場合、先頭 2 バイトには、アクセスしたレコードの圧縮レコード長がバイナリ形式で格納されます。
後ろ 2 バイトには、フォーマットバッファで選択し、アクセスしたフィールドの非圧縮長がバイナリ形式で格納されます。
注意:
プリフェッチ機能の使用時、この長さ情報は返されません。
このフィールドには、Adabas Security または Adabas SAF Security パスワードを指定します。 データベース、ファイル、またはフィールドがセキュリティ保護されている場合は、ユーザーは該当するセキュリティパスワードを指定する必要があります。 パスワードを保護するために、コマンド処理時にアディション 3 フィールドに空白がセットされます。
このフィールドは、サイファコードを指定するために使用します。 ファイルを暗号化する場合は、有効なサイファコードを指定する必要があります。 ファイルを暗号化しない場合は、このフィールドに空白をセットする必要があります。
Adabas は、コマンド処理時に、サイファコードに空白をセットし、バージョンコードとデータベース ID をフィールドの下位 3 バイトに返します。 詳細については「コントロールブロックフィールド」を参照してください。
このフィールドには、このコマンド用の内部フォーマットバッファを識別する別のフォーマット ID を指定するか、グローバルフォーマット ID を指定します。
アディション 5 フィールドで 1 バイト目の上位(左端)ビットに 1 が設定されていない場合、コマンド ID フィールドに指定された値がフォーマット ID として使用されます。
このビットに 1 がセットされていると、アディション 5 フィールドの 5 バイト目から 8 バイト目までがフォーマット ID として使用されます。
さらに、アディション 5 フィールドの第 1 バイトの最上位(左端)2 ビットに、1(B'11')がセットされると、アディション 5 フィールドの全 8 バイトが、グローバルフォーマット ID として使用されます(つまり、複数ユーザーがこのフォーマット ID を同時に使用できます)。
詳細と例については、「コマンド ID、フォーマット ID、グローバルフォーマット ID」を参照してください。
コマンドがゼロ以外のレスポンスコードを返したときは、このフィールドにレスポンスコードの正確な意味を定義したサブコードが含まれます。 レスポンスコードとサブコードについては、『Adabas メッセージおよびコード』を参照してください。
L2 コマンドおよび L5 コマンドには、次のバッファが適用されます。
値を取得するフィールドをこのバッファに指定します。 フォーマットバッファの構文および例については、「バッファの定義」を参照してください。
"C." がフォーマットバッファの先頭 2 桁にあると、COMPRESSED オプションが有効になります。 これにより、レコードは、圧縮解除された形式ではなく圧縮された形式で返されます。
一度 L2 コマンドまたは L5 コマンドを発行した後で、フォーマットバッファを変更することはできません。
Adabas は、バッファに要求されたフィールドの値をこのバッファに返します。 ユーザーがフォーマットバッファに長さやフォーマットを標準以外の値に指定していない限り、すべての値は各フィールドの標準長およびフォーマットに従って返されます。
ISN バッファが使用されるのは、コマンドレベルのマルチフェッチオプションを使用した場合、および ACB インターフェイスダイレクトコールを使用してコマンドを発行した場合に限られます。 詳細は、「マルチフェッチ/プリフェッチ機能の使用」を参照してください。 マルチフェッチを使用した場合、L2 コマンドまたは L5 コマンドはレコードディスクリプタエレメントを最大 16 バイトの長さまで ISN バッファに返します(「BT/ET のマルチフェッチ処理」セクション参照)。
マルチフェッチバッファが使用されるのは、コマンドレベルのマルチフェッチオプションを使用した場合、および ACBX インターフェイスダイレクトコールを使用してコマンドを発行した場合に限られます。 詳細は、「マルチフェッチ/プリフェッチ機能の使用」を参照してください。 マルチフェッチを使用した場合、L2 コマンドまたは L5 コマンドはレコードディスクリプタエレメントを最大 16 バイトの長さまでマルチフェッチバッファに返します(「BT/ET のマルチフェッチ処理」セクション参照)。
L2 コマンドと L5 コマンドを使用する場合、次の事項も考慮しなければなりません。
L2 コマンドと L5 コマンドで使用したコマンド ID は、Adabas により内部的に保存および使用されます。 この ID は、エンドオブファイル条件が検出されるか、RC コマンドか CL コマンドが発行されるか、Adabas セッションが終了したときに解放されます。 同じコマンド ID は、解放されるまで他の読み込みシーケンシャルコマンドでは使用できません。
L2 または L5 コマンドを使用して読み込んでいるファイルに対して、レコードの更新と削除を行うことができます。 Adabas では、ユーザーに返した最後のレコードと次に返すレコードに関する情報を保持しているため、ユーザーがその間にレコードを更新または削除しても、正しく次のレコードを返します。
L2 コマンドまたは L5 コマンドで読み込もうとするファイルを別のユーザーが更新している場合は、L2 コマンドまたは L5 コマンドでそのファイルを読み込んでも、レコードが返されないことがあります。 また、ファイルの順次読み込み中に同じレコードが複数回返されることもあります。