--begin by itlife365
如何读取oracle的大字段数据clob
首先,CLOB里存的是2进制
判定长度DBMS_LOB.GETLENGTH(col1)
获取文本DBMS_LOB.SUBSTR(col1,n,pos)
DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节
DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全部数据
DBMS_LOB.FILECLOSE(IMG_BFILE)关闭文件
使用dbms_lob.substr时只能转化一部分,再多的时候就提示缓存不够。
dbms_lob.substr(test.clob_content,3500,1)
select dbms_lob.substr(student.name,3500,1) from student;
clob转化为字符串,SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(col1,10,1)) FROM tab1;
如果clob中包含空格则不能使用。
将clob类型转化成字符串
create or replace function getclob(
table_name in varchar2,
field_id in varchar2,
field_name in varchar2,
v_id in number,
v_pos in number) return varchar2
is
lobloc clob;
buffer varchar2(32767);
amount number := 2000;
offset number := 1;
query_str varchar2(1000);
begin
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id ';
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
offset:=offset+(v_pos-1)*2000;
dbms_lob.read(lobloc,amount,offset,buffer);
return buffer;
exception
when no_data_found then
return buffer;
end;
--end by itlife365