如何在clob中存取大型中文对象?

sunsdstorm 2002-07-11 08:47:27
在工作中遇到大数据存取的问题,用clob作为字段类型。问:如何实现编程工具和oracle的过程或函数(关于dbms_lob)的交互或者说控制(条件或循环等控制语句)执行。
...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsdstorm 2002-07-15
  • 打赏
  • 举报
回复
为了俺的信誉分,还是结了吧。就把分分给俺的马甲算了,其他回答实在不能让我获得什么
softnail 2002-07-15
  • 打赏
  • 举报
回复
create or replace procedure updateclob(
table_name in varchar2,
field_id in varchar2,
field_name in varchar2,
v_id in number,
v_pos in number,
v_clob in varchar2)
is
lobloc clob;
c_clob varchar2(32767);
amt binary_integer;
pos binary_integer;
query_str varchar2(1000);
begin
pos:=v_pos*32766+1;
amt := length(v_clob);
c_clob:=v_clob;
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id for update ';
--initialize buffer with data to be inserted or updated
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
--from pos position, write 32766 varchar2 into lobloc
dbms_lob.write(lobloc, amt, pos, c_clob);
commit;
exception
when others then
rollback;
end;
l /用法说明:
在插入或修改以前,先把其它字段插入或修改,CLOB字段设置为空empty_clob(),
然后调用以上的过程插入大于2048到32766个字符。
如果需要插入大于32767个字符,编一个循环即可解决问题。
查询CLOB的PL/SQL函数:getclob
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 ';
--initialize buffer with data to be found
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
offset:=offset+(v_pos-1)*2000;
--read 2000 varchar2 from the buffer
dbms_lob.read(lobloc,amount,offset,buffer);
return buffer;
exception
when no_data_found then
return buffer;
end;
l 用法说明:
用select getclob(table_name,field_id,field_name,v_id,v_pos) as partstr from dual;
可以从CLOB字段中取2000个字符到partstr中,
编一个循环可以把partstr组合成dbms_lob.getlength(field_name)长度的目标字符串。
sunsdstorm 2002-07-13
  • 打赏
  • 举报
回复
在以前的论坛的帖子中发现几个方法:用bfile做中间存储介质,如何bfile与clob或外在文件进行数据交流。但我的oracle服务器是在ibm aix系统上,外在文件不是随便就可以在服务器上建立的,诸位还有什么办法?
姑妄言之,亦是快事。
blue__star 2002-07-12
  • 打赏
  • 举报
回复
用JDBC可以
如果是DEPHI也可以用ADO
KingSunSha 2002-07-11
  • 打赏
  • 举报
回复
你具体使用什么前台工具?不同的工具处理方式不一样的。

在论坛中有不少CLOB的讨论,至少用ADO和JDBC都有实际的例子,你搜索一下吧

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧