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博客 ” ,链接:https://blog.itpub.net/23135684/viewspace-664934/ ,如需转载,请注明出处,否则将追究法律责任。