ラージ・オブジェクト

ラージ・オブジェクト という語と総称的な頭字語である LOB は、CLOB、DBCLOB、BLOB の各データ・タイプを指す総称です。

ロケーターを用いたラージ・オブジェクトの操作

LOB 値は非常に大きい場合があるので、 データベース・サーバーからクライアント・アプリケーション・プログラムの変数に LOB 値を転送する処理には、かなりの時間がかかることがあります。 また、アプリケーション・プログラムでは、 LOB 値をまとめて処理するのではなく 1 つずつ処理するのが一般的です。 そのような場合、アプリケーションでは、 ラージ・オブジェクト・ロケーター (LOB ロケーター) によって LOB 値を参照できます。 1

ラージ・オブジェクト・ロケーター、略して LOB ロケーターは、 データベース・サーバーにおける単一の LOB 値を表す値を持った変数です。 LOB ロケーターが開発されたことによって、 アプリケーション・プログラムを実行できるクライアント・マシンに LOB 値全体を格納しなくても、 非常に大きなオブジェクトをアプリケーション・プログラムで簡単に取り扱うことができるようなメカニズムが可能になります。

例えば、LOB 値を選択する場合、アプリケーション・プログラムは、可能であれば LOB 値全体を選択し、それを同じ大きさの変数に入れる (アプリケーション・プログラムが LOB 値全体を一度で処理するのであれば受け入れ可能) か、または、その代わりに LOB 値を選択して LOB ロケーターに入れます。 その後、LOB ロケーターを使用すれば、アプリケーション・プログラムはロケーター値を入力として与えることにより、LOB 値上での後続のデータベース操作を出すことができます。 したがって、例えば、クライアント変数に割り当てられたデータ量などのロケーター演算の結果の出力は、一般的には、入力 LOB 値の小さなサブセットになります。

LOB ロケーターでは基本値を表せるだけでなく、LOB 式に関連付けられた値も表せます。 例えば、LOB ロケーターでは以下の式に関連付けられた値を表すこともできます。

    SUBSTR(lob_value_1 CONCAT lob_value_2 CONCAT lob_value_3, 42, 6000000)

アプリケーション・プログラムにおける非ロケーター・ベースのホスト変数の場合、NULL 値がホスト変数に選択されると、標識変数は -1 に設定され、値が NULL であることを示します。 しかしながら、LOB ロケーターの場合は、標識変数の意味は若干異なっています。 LOB ロケーター・ホスト変数自体は決して NULL になることはないため、負の標識変数値は LOB ロケーターにより表される LOB 値が NULL であることを示しています。 標識変数値によって、クライアントに対して NULL 情報がローカルに保持され ます。サーバーは、有効な LOB ロケーターによって NULL 値を追跡しません。

LOB ロケーターは値を表しているのであり、行またはデータベースの位置を表しているのではないということを理解することが重要です。 いったん LOB ロケーターに値が選択されてしまうと、 LOB ロケーターが参照している値に影響を及ぼすことになるオリジナルの行や表で実行できる演算はありません。 LOB ロケーターに関連した値は、トランザクションが終了するか、あるいは LOB ロケ ーターが明示的に解放されるか、そのいずれかが先に起こるまで有効です。

LOB ロケーターは、トランザクション中に LOB 値を参照するためのメカニズムに過ぎません。したがって、ロケーターが作成されたときのトランザクションを超えてまでも存続することはありません。 また、LOB ロケーターはデータベース・タイプでもありません。したがって、データベースに保管されることはなく、その結果、ビュー制約や検査制約に関与することも不可能です。しかしながら、ロケーターは LOB タイプを表しているため、FETCH、OPEN、CALL、および EXECUTE ステートメントで使用される SQLDA 構造内で記述できるような LOB タイプ用の SQLTYPE があります。

LOB ストリングを使用する際の制約事項については、 ストリングの使用に関する制限を参照してください。

1 Java™ アプリケーションには、LOB ロケーターによって記述した CLOB または BLOB と、そうでない CLOB または BLOB とを区別する機能がありません。