SQL 解説書

ロケーターによるラージ・オブジェクト (LOB) の操作

LOB 値は非常に大きいため、 この値をデータベース・サーバーからクライアント・アプリケーション・プログラムのホスト変数に転送するには多くの時間がかかります。 しかし、アプリケーションが一度に処理するのは通常は LOB 値の全体ではなく、 小さな部分だけであるのがほとんどです。 アプリケーションが LOB 値全体をアプリケーション・メモリーに保管することを必要としない (または保管したくない) 場合、 アプリケーションはラージ・オブジェクト・ロケーター (LOB ロケーター) によって 1 つの LOB 値を参照することができます。

ラージ・オブジェクト・ロケーター つまり LOB ロケーターは、 データベース・サーバーの単一 LOB 値を表す値を伴うホスト変数です。

LOB ロケーターは、ユーザーが、 アプリケーション・プログラムの動作しているクライアント・マシンに LOB 値全体を保管することなく、 アプリケーション・プログラムで非常に大規模なオブジェクトを簡単に操作できるようにするためのメカニズムとして開発されました。

たとえば 1 つの LOB 値を選択する場合、 アプリケーション・プログラムは LOB 値全体を選択し、 それを同じように大きなホスト変数に入れることもできますが (これは、 アプリケーション・プログラムが一度に LOB 値全体を処理しようとする場合に適しています)、 LOB ロケーターに入る LOB 値だけを選択することもできます。 その後、アプリケーション・プログラムは LOB ロケーターを使用して、 そのロケーター値を入力として指定することによって、 その LOB 値に対する以降のデータベース操作 (スカラー関数 SUBSTR、 CONCAT、 VALUE、 LENGTH の適用、 割り当ての実行、 LIKE または POSSTR による LOB の探索、LOB に対する UDF の適用など) を行うことができます。 クライアントのホスト変数に割り当てられるデータ量など、 ロケーター操作による出力結果は、 多くの場合、入力 LOB 値の小さいサブセットとなります。

LOB ロケーターは、基本値以外のものを表現する場合もあり、 LOB 式に対応する値を表現することもできます。 たとえば、LOB ロケーターで、次の式に対応する値を表現できます。

    SUBSTR( <lob 1> CONCAT <lob 2> CONCAT <lob 3>, <start>, <length> )

アプリケーション・プログラムの通常のホスト変数では、 そのホスト変数にヌル値が選択されている場合、 標識変数は値がヌル値であることを示す -1 に設定されます。 しかし、LOB ロケーターの場合は、標識変数の意味が少し違います。 ロケーター・ホスト変数自体はヌル値にすることができないので、 標識変数の負の値は、その LOB ロケーターが表す LOB 値がヌル値であることを示します。 標識変数の値により、ヌル値情報はクライアントにとってローカルに保持されます。 サーバー側では有効なロケーターによってヌル値を追跡しません。

LOB ロケーターが表すのは 1 つの値であって、 データベースの行や場所を表すわけではない、ということは重要です。 値がロケーターに選択されると、 ロケーターが参照する値に影響を及ぼすような操作を、 元の行や表に対して実行することはできません。 ロケーターに対応する値は、トランザクションが終了するか、 ロケーターが明示的に解放されるかする時まで有効です。 ロケーターでは、この機能を実現するためにデータのコピーなどを行ったりはしません。 その代わりに、ロケーター・メカニズムに基本 LOB 値の内容が保管されます。 LOB 値 (または、上記のように式) の具体化は、 LOB 値が実際に何らかの位置を割り当てられるまで延期されます。 すなわち、ホスト変数の形式でユーザー・バッファーに入れられるか、 もしくはデータベースの別のレコードのフィールド値に入れられるまでです。

LOB ロケーターは、トランザクションの中で LOB 値を参照するための唯一のメカニズムです。 LOB ロケーターはそれが作成されたトランザクションを超えて存続することはありません。 また、LOB ロケーターはデータベース・タイプではなく、 データベースに保管されることはありません。 したがって、視点や検査制約には加わりません。 しかし、ロケーターは LOB タイプのクライアント側の表現なので、 FETCH、OPEN、および EXECUTE ステートメントで使用される SQLDA 構造の中で記述されるよう、 LOB ロケーターの SQLTYPE が用意されています。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]