BLOB を CLOB に変換する(DBMS_LOB.CONVERTTOCLOB)
BLOB型のデータをCLOB型に変換するには DBMS_LOBパッケージのCONVERTTOCLOBプロシージャを使用する。
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス 11g リリース2(11.2) B56262-03 79 DBMS_LOB CONVERTTOCLOBプロシージャ http://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_lob.htm#i1020356
下記は BLOB_Aテーブルの C1カラム(BLOB型) を DBMS_LOB.CONVERTTOCLOBプロシージャで CLOB に変換するサンプルコード。
SET LINESIZE 32767; SET PAGESIZE 50000; SET LONG 1000000; SET LONGC 1000000; VARIABLE cclob CLOB; DECLARE i_amount INTEGER := DBMS_LOB.LOBMAXSIZE; i_dest_offset INTEGER := 1; i_src_offset INTEGER := 1; i_default_csid INTEGER := DBMS_LOB.DEFAULT_CSID; i_lang_context INTEGER := DBMS_LOB.DEFAULT_LANG_CTX; i_warning INTEGER; i_lob_length INTEGER; cblob BLOB; BEGIN -- Loading to clob from blob SELECT C1 INTO cblob FROM BLOB_A WHERE ROWNUM <= 1; DBMS_LOB.CREATETEMPORARY(:cclob, TRUE, DBMS_LOB.CALL); DBMS_LOB.CONVERTTOCLOB( :cclob, cblob, i_amount, i_dest_offset, i_src_offset, i_default_csid, i_lang_context, i_warning ); END; / PRINT cclob;
実行結果は以下の通り。判り難いけど上手くいってるyo!
SQL> SELECT DBMS_LOB.GETLENGTH(C1) FROM BLOB_A; DBMS_LOB.GETLENGTH(C1) ---------------------- 780988 SQL> DESC BLOB_A; Name Null? Type ----------------------------------------- -------- ---------------------------- C1 BLOB SQL> SELECT DBMS_LOB.GETLENGTH(C1) FROM BLOB_A; DBMS_LOB.GETLENGTH(C1) ---------------------- 780988 SQL> SET ECHO ON SQL> @./cclob.sql SQL> SET SERVEROUTPUT ON SIZE UNLIMITED; SQL> SET LINESIZE 32767; SQL> SET PAGESIZE 50000; SQL> SET LONG 1000000; SQL> SET LONGC 1000000; SQL> VARIABLE cclob CLOB; SQL> DECLARE 2 i_amount INTEGER := DBMS_LOB.LOBMAXSIZE; 3 i_dest_offset INTEGER := 1; 4 i_src_offset INTEGER := 1; 5 i_default_csid INTEGER := DBMS_LOB.DEFAULT_CSID; 6 i_lang_context INTEGER := DBMS_LOB.DEFAULT_LANG_CTX; 7 i_warning INTEGER; 8 i_lob_length INTEGER; 9 cblob BLOB; 10 BEGIN 11 -- Loading to clob from blob 12 SELECT C1 INTO cblob FROM BLOB_A WHERE ROWNUM <= 1; 13 DBMS_LOB.CREATETEMPORARY(:cclob, TRUE, DBMS_LOB.CALL); 14 DBMS_LOB.CONVERTTOCLOB( 15 :cclob, 16 cblob, 17 i_amount, 18 i_dest_offset, 19 i_src_offset, 20 i_default_csid, 21 i_lang_context, 22 i_warning 23 ); 24 END; 25 / PL/SQL procedure successfully completed. SQL> PRINT cclob; CCLOB --------------------------------------------------------------------- CREATE MATERIALIZED VIEW "TESTA"."MVIEW_A" (…