存储过程中,游标遍历到最后一行记录,报错oracle ORA-06502 PL/SQL:数字或值错误

mysqldbd 2012-11-07 10:46:49
存储过程中,游标遍历到最后一行记录,报错oracle ORA-06502 PL/SQL:数字或值错误:

存储过程如下:


create or replace procedure pro_fp  is
begin
Declare
CURSOR bcur
IS SELECT sessionid,transcript from of.fpsession where rownum<15;
brec bcur%ROWTYPE;
BEGIN
-- insert into testlong1(id,name) select id,name from testlong;--其它类型先插入
OPEN bcur;
LOOP
FETCH bcur INTO brec;
EXIT WHEN bcur%NOTFOUND;
update of.fpsession_3 set transcript=brec.transcript where sessionid=brec.sessionid;
commit;
END LOOP;
CLOSE bcur;
END;
end pro_fp;


报错的行定位在:FETCH bcur INTO brec;就只执行到最后一行的时候报错,但是所有的数据都通过update执行成功了。

大家看下,怎么避免最后一行报错,我的sessionid字段是varchar类型,transcript 是long类型的。
...全文
1840 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenChiM888 2012-11-08
  • 打赏
  • 举报
回复

where sessionid=brec.sessionid

--应该是这两个sessionid的类型不一样
brec.sessionid --这个是varchar2
sessionid --这个是 number
--oracle执行计划会做隐式类型转换为
where sessionid= to_number(brec.sessionid)
--这样 一但你的 brec.sessionid 里面保存有非数字字符就会报你这个错误。

ssqtjffcu 2012-11-07
  • 打赏
  • 举报
回复
引用 2 楼 mysqldbd 的回复:
引用 1 楼 ssqtjffcu1 的回复:fpsession_3和fpsession表的sessionid,transcript 两个字段,类型大小相同么? sessionid字段是varchar类型,transcript 是long类型 不相同啊,肯定不相同的。
fpsession_3和fpsession表的transcript字段类型大小想相不相同?
mysqldbd 2012-11-07
  • 打赏
  • 举报
回复
引用 1 楼 ssqtjffcu1 的回复:
fpsession_3和fpsession表的sessionid,transcript 两个字段,类型大小相同么?
sessionid字段是varchar类型,transcript 是long类型 不相同啊,肯定不相同的。
ssqtjffcu 2012-11-07
  • 打赏
  • 举报
回复
fpsession_3和fpsession表的sessionid,transcript 两个字段,类型大小相同么?

17,086

社区成员

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

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