2.3 表からのLOB値の選択

読取りおよび書込み操作を実行するために、文字バッファ、RAWバッファまたはLOB変数にLOBを選択できます。

2.3.1 文字バッファまたはRAWバッファへのLOBの選択

CLOB値またはNCLOB値は、文字バッファまたはBLOB値に直接選択できます。これはデータ・インタフェースと呼ばれ、LOB列から選択する最も効率的な方法です。

2.3.2 読取り操作用のLOB変数へのLOBの選択

LOB変数に永続LOBまたは一時LOBを選択し、APIを使用してそのLOBに対して様々な読取り操作を実行できます。

次のコードでは、LOBロケータを選択して変数にします。
DECLARE
    perslob CLOB;
    templob CLOB;
    amt INTEGER := 11;
    buf VARCHAR(100);
BEGIN
    SELECT ad_source, substr(ad_source, 3) INTO perslob, templob FROM Print_media WHERE product_id = 1 AND ad_id = 1;
    DBMS_LOB.READ(perslob, amt, buf);
    DBMS_LOB.READ(templob, amt, buf);
END;
/

2.3.3 書込み操作用のLOB変数へのLOBの選択

LOBロケータを使用して書込み操作を実行するには、トランザクション中に他のデータベース・ユーザーがLOBに書き込むのを防ぐために、表内の行をロックする必要があります。

この操作には、次のメカニズムのいずれかを使用できます。
  • RETURNING句を使用したINSERTまたはUPDATE操作の実行。
  • UPDATE操作に対するSELECTの実行。次のコード・スニペットは、UPDATEを使用してLOB値を選択し、書込み操作を実行する方法を示しています。
    DECLARE
        c CLOB;
        amt INTEGER := 9;
        buf VARCHAR(100) := 'New Value';
    BEGIN
        SELECT ad_sourcetext INTO c FROM Print_media WHERE product_id = 1 AND ad_id = 1 FOR UPDATE;
        DBMS_LOB.WRITE(c, amt, 1, buf);
    END;
    /
  • OCIプログラムでのOCI pinまたはlock関数の使用。