Oracle Blob 轉換為Clob

尛樣兒發表於2010-06-10

SQL> create table test (id number,name blob);
 
Table created
 
SQL> create table test2 (id number,name clob);
 
Table created
 
SQL> insert into test values (111,rawtohex('hello'));
 
1 row inserted
 
SQL> commit;
 
Commit complete

//查詢blob資料

SQL> declare
  2  bb blob;
  3  amt number;
  4  pos number;
  5  cot number;
  6  buf raw(40);
  7  begin
  8  select name into bb from test where id=111;
  9  dbms_lob.open(bb, dbms_lob.lob_readonly);
 10  amt := 40; pos := 1; buf := '';
 11  cot :=1 + dbms_lob.getlength(bb);
 12  while pos
 13  dbms_lob.read(bb,amt,pos,buf);
 14  dbms_output.put_line(utl_raw.cast_to_varchar2(buf));
 15  pos :=pos+amt;
 16  end loop;
 17  dbms_lob.close(bb);
 18  end;
 19  /
 
hello
 
PL/SQL procedure successfully completed
 
//blob轉換為clob

SQL> DECLARE
  2  l_sour_blob BLOB;
  3  l_dest_clob CLOB;
  4  l_lang NUMBER := DBMS_LOB.default_lang_ctx; //一定繫結為變數,不然報PLS-00363錯誤
  5  l_warning NUMBER;
  6  l_t_offset NUMBER := 1;
  7  l_src_offset NUMBER := 1;
  8  BEGIN
  9  SELECT name
 10  INTO l_sour_blob
 11  FROM test
 12  where id=111;
 14  DBMS_LOB.CREATETEMPORARY(l_dest_clob,TRUE,2);  
 //初始化clob,不加報錯:ORA-06502: PL/SQL: numeric or value error
 15  -- convert to CLOB for display
 16  DBMS_LOB.converttoclob (l_dest_clob,
 17  l_sour_blob,
 18  DBMS_LOB.lobmaxsize,
 19  l_t_offset,
 20  l_src_offset,
 21  DBMS_LOB.default_csid,
 22  l_lang,
 23  l_warning
 24  );
 25  insert into test2 values(111,l_dest_clob);
 26  commit;
 27  END;
 28  /
 
PL/SQL procedure successfully completed
 
//查詢clob資料
SQL> select * from test2;
 
        ID NAME
---------- --------------------------------------------------------------------------------
       111 hello
 
SQL>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-664934/,如需轉載,請註明出處,否則將追究法律責任。

相關文章