|
Insert Extended オペレーション(B_EXT_INSERT)では、ファイルに 1 つまたは複数のレコードを挿入します。トランザクショナル インターフェイスでは、新しいレコードのキー値を反映して、キーの B ツリーが調整されます。
メモ
NCC(No-currency-change:カレンシー変更なし)オプションを使用すると、Insert Extended オペレーションはキー バッファー パラメーターの値を更新しません。つまり、キー バッファー パラメーターには何の情報も返されません。
次の表は、データ バッファーの構造体を示しています。
要素
|
長さ(バイト単位)
|
説明
|
---|---|---|
固定部分
|
2
|
挿入するレコード数。
|
繰り返し部分(レコードごとに 1 つあります)
|
||
|
2
|
レコード イメージの長さ。
|
|
n
|
レコード イメージ。
|
Insert Extended オペレーションが正常に終了した場合、トランザクショナル インターフェイスではファイルに新しいレコードが挿入され、新しいレコードを反映してすべての B ツリーが更新されます。さらに、NCC Insert Extended オペレーションの場合を除き、最後に挿入したレコードから、指定したキーの値がキー バッファーに返されます。また、戻りデータ バッファーの先頭ワードには、ファイルに正常に挿入されたレコードの数がトランザクショナル インターフェイスによって格納されます。データ バッファーの先頭ワードの後には、挿入されたレコードのアドレスがトランザクショナル インターフェイスによって格納されます。
オペレーションの一部しか正常に実行されず、トランザクショナル インターフェイスから 0 以外のステータス コードが返された場合、データ バッファーの先頭ワードの値は正常に挿入されたレコードの数と等しくなります。エラーの原因となったレコードは、正常に挿入されたレコード数 + 1 番目のレコードです。
Insert Extended オペレーションが正常に実行されなかった場合は、トランザクショナル インターフェイスから次のステータス コードのいずれかが返されます。
2
|
アプリケーションで I/O エラーが発生しました。
|
3
|
ファイルが開いていません。
|
5
|
レコードのキー フィールドに重複するキー値があります。
|
18
|
ディスクがいっぱいです。
|
21
|
キー バッファー パラメーターが短すぎます。
|
22
|
データ バッファー パラメーターが短すぎます。
|
NCC オプションを指定しない Insert Extended オペレーションを実行すると、完全な論理カレンシーおよび物理カレンシーが確立し、挿入されたレコードのキー値がヌルでなければ、最後に挿入されたレコードが現在のレコードになります。論理カレンシーは指定したキーに基づきます。
NCC Insert Extended オペレーションを実行すると、論理カレンシーは影響を受けずに、物理カレンシーが確立されます。つまり、NCC Insert Extended オペレーションを実行したアプリケーションでは、ファイル内の論理位置はオペレーションを実行する前と変わらないということです。このような状況で、NCC Insert Extended オペレーションに続けて、Get Next(6)、Get Next Extended(36)、Get Previous(7)、および Get Previous Extended(37)などのオペレーションを実行すると、NCC Insert Extended オペレーション実行以前のアプリケーションの論理カレンシーに基づく値が返されます。
メモ
トランザクショナル インターフェイスでは、NCC Insert Extended オペレーションを実行しても、その結果として何の情報もキー バッファーには返されません。したがって、論理カレンシーの維持が必要なアプリケーションでは、NCC Insert Extended オペレーション後にキー バッファーの値を変更しないでください。変更すると、次の Get オペレーションの結果は予測できないものになります。
トランザクショナル インターフェイスでは標準の Insert Extended オペレーションと NCC Insert Extended オペレーションのどちらを実行しても、新しく挿入されたレコードに対し物理カレンシーが確立されます。したがって、NCC Insert Extended オペレーションに続く Step Next(24)、Step Next Extended(38)、Step Previous(35)、Step Previous Extended(39)、Update(3)、Delete(4)、および Get Position(22)などのオペレーションは、新しい物理カレンシーに基づいて機能します。
Get Next オペレーション(6)のような、元の論理カレンシーに基づくオペレーションを実行するために、アプリケーションで Insert Extended オペレーション実行前のファイルの論理位置を保存しておく必要がある場合に、NCC Insert Extended オペレーションが役立ちます。
NCC Insert Extended オペレーションを実行しないで同様の結果を得るには、アプリケーションで以下の手順を実行する必要があります。
NCC Insert Extended オペレーションは、論理カレンシーについてはこの手順と同様の結果を得られますが、物理カレンシーについては異なります。たとえば、これら 2 つの手順のいずれかに続けて Get Next(6)オペレーションを実行した場合は、どちらの手順でも結果は変わりませんが、Step Next(24)を実行した場合は、異なるレコードが返される可能性があります。
|