3 一時LOB

一時LOBは、アプリケーションの他のローカル変数と同様に一時LOBです。この章では、一時LOBに固有の操作について説明します。

3.1 LOBの変換

値LOBは、読取り専用一時LOB(これは一時LOBのサブセット)のサブセットです。

次の表に、様々な種類のLOBを変換する方法をまとめます。左側の列は、変換する必要があるソースLOBです。これらの列見出しはターゲットLOBであり、変換後のLOBの最終的な状態です。たとえば、読取り専用一時LOBを値LOBに変換するには、LOB_VALUE(lob_producing_plsql_function(...))を使用します。

ソースLOB 値LOB 読取り専用一時LOB 一時LOB 永続LOB
値LOB 該当なし
  • SQLからPLSQLに渡す。PLSQL出力からJDBC、OCIなどに渡された場合、それは読取り専用一時LOBのままになります。
  • 古いクライアント(JDBCやOCIなど)に送信する
直接は不可 直接は不可
読取り専用一時LOB LOB_VALUE(lob_producing_plsql_function(...)) 該当なし 直接は不可 直接は不可
一時LOB LOB_VALUE(temporary_lob) READモードでオープンする 該当なし 直接は不可
永続LOB
  • QUERY AS VALUEとして宣言された列からのSELECT
  • LOB_VALUE(persistent_lob)
直接は不可 SQL演算子(to_clob()substr()など)を使用する 該当なし

次の例では、一時LOBおよび読取り専用一時LOBを値LOBに変換する方法を示します。また、値LOBを読取り専用一時LOBに変換する方法も示します。

DROP TABLE t;

CREATE TABLE t (c clob) lob(c) query as value;
INSERT INTO t VALUES ('I am a CLOB');

CREATE OR REPLACE FUNCTION Vbl2rdo (c clob) RETURN clob IS
BEGIN
    RETURN c;
END;

/
-- Transform value LOB to read-only temporary LOB
var tc clob;
BEGIN
    SELECT c INTO :tc FROM t;
END;
/

print :tc
SELECT Vbl2rdo(c) FROM t;

-- Transform read-only temporary LOB to value LOB
SELECT lob_value(:tc) FROM dual;

-- Transform temporary LOB to value LOB
SELECT lob_value(to_clob('I am a temporary LOB')) FROM dual;

次の例では、永続LOBを一時LOBおよび値LOBに変換する方法を示します。

DROP TABLE t2;

CREATE TABLE t2 (c CLOB);

INSERT INTO t2 VALUES ('I am a CLOB');

-- Transform persistent LOB to value LOB
SELECT Lob_value(c) FROM t2;

-- Transform persistent LOB to temporary LOB
SELECT To_clob(c) FROM t2;