oracle 存储过程返回clob类型问题.

wo6522317 2011-03-31 02:31:24
表中有一列字符类型 C,数据量很大,现有应用系统需要将获取的记录中 列C 用逗号分隔,组成CLOB类型返回

........--测试代码
procedure GetMonitorStyle(out_data out clob) as
cursor curdata is select msd_data from monitorstyledata where msd_msiid =40; --数据游标
l_dbvalue varchar2(100):=''; --值
l_clob clob ; --大字段
t_amount number;
t_offset number;
begin
-- 写入
open curdata;
SELECT document INTO l_clob FROM info where rownum=1 FOR UPDATE ;
loop
fetch curdata into l_dbvalue;
exit when curdata%notfound;
l_dbvalue:=concat(l_dbvalue,',');
t_amount :=length(l_dbvalue); --获取追加文本的长度
dbms_lob.WRITEAPPEND(l_clob,t_amount,l_dbvalue);
end loop;
close curdata;
commit;
--out_data := l_clob; --ora-03127 在活动操作结束前.....
end;
----------------------------------------------------------------
现在我是通过获取后一个中间表 info(只有一列,clob,一行数据) 将数据用逗号分隔后保存到这个表里,
应用系统再去这张表里,去获取这个CLOB数据;

直接将这个CLOB返回,发现数据不会,并且错报错. ora-03127 在活动操作结束前.....

有没有办法直接在存储过程里,就返回这个CLOB数据?
谢谢各位.


...全文
959 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wo6522317 2011-04-01
  • 打赏
  • 举报
回复
谢谢各位,可以不用中间表 ,直接返回,
使用datareder访问;
wo6522317 2011-04-01
  • 打赏
  • 举报
回复
谢谢各位,试了还是不行
[Quote=引用 8 楼 hyee 的回复:]

去掉commit试试,或者这样

dbms_lob.create_temporary(out_data,true);
dbms_lob.append(out_data,l_lob);
commit;
[/Quote]
hyee 2011-03-31
  • 打赏
  • 举报
回复
去掉commit试试,或者这样

dbms_lob.create_temporary(out_data,true);
dbms_lob.append(out_data,l_lob);
commit;
java_yoshiki 2011-03-31
  • 打赏
  • 举报
回复
期待回复,我刚好也遇到这个问题
wo6522317 2011-03-31
  • 打赏
  • 举报
回复
楼上的兄弟,还是不行,
能不能把您写的代码,关键上下文部分 放上来给我看看?
hanzs 2011-03-31
  • 打赏
  • 举报
回复
我一直是这样处理的,都没错误的。你把l_clob变量初始化下,赋个null值,然后再执行拼接
wo6522317 2011-03-31
  • 打赏
  • 举报
回复
楼上,不可以 会报错的.

错误:PLS-00306: 调用 '||' 时参数数量或类型错误
hanzs 2011-03-31
  • 打赏
  • 举报
回复
不需要中间表,Clob类型可以直接按字符拼接来处理,可以这样写:
l_clob := l_clob || l_dbvalue || ',';

循环结束后再out_data := l_clob

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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