13.3 オブジェクト・キャッシュ内のLOB

LOBロケータ属性を使用してオブジェクト・キャッシュ内でオブジェクトを別のオブジェクトにコピーする場合、LOBロケータのみがコピーされます。

つまり、これら2つの異なるオブジェクト内のLOB属性には、唯一かつ同一のLOBを参照する厳密に同一のロケータが含まれます。ターゲットLOBをフラッシュする場合のみ、LOB値の個別の物理コピーが作成されます。これは、ソースLOB値とは異なります。

関連項目:

ロケータの1つを使用して書込み操作が実行された場合、各オブジェクトでどのバージョンのLOB値が参照されるかについては、LOBの更新および読取り一貫性の例を参照してください。

したがって、コピーのターゲットであったLOBを変更する場合、ターゲット・オブジェクトをフラッシュし、ターゲット・オブジェクトをリフレッシュしてから、ロケータ属性を介してLOBに書き込む必要があります。

LOBおよびBFILE属性について、次のオブジェクト・キャッシュの問題を考慮してください。

  • 永続LOB属性: オブジェクト・キャッシュ内にオブジェクトを作成すると、LOB属性は空に設定されます。

    オブジェクト・キャッシュ内に、永続LOB属性を持つオブジェクトを作成すると、そのLOB属性は暗黙的に空に設定されます。この空のLOBロケータを使用して、データをLOBに書き込むことはできません。最初にオブジェクトをフラッシュし、その後、表に行を挿入し、空のLOB(長さゼロ(0)のLOB)を作成する必要があります。OCI_PIN_LATEST関数を使用してオブジェクト・キャッシュ内のオブジェクトをリフレッシュすると、実際のLOBロケータが属性に読み取られ、OCI LOB APIをコールしてLOBにデータを書き込めます。

  • BFILE属性: オブジェクト・キャッシュ内にオブジェクトを作成すると、BFILE属性はNULLに設定されます。

    BFILE属性を持つオブジェクトを作成すると、BFILENULLに設定されます。BFILEから読み取る前に、有効なDIRECTORYオブジェクト名とファイル名を使用して更新する必要があります。