存储过程中,游标遍历到最后一行记录,报错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类型的。

解决方案 »

  1.   

    fpsession_3和fpsession表的sessionid,transcript 两个字段,类型大小相同么?
      

  2.   


    sessionid字段是varchar类型,transcript 是long类型不相同啊,肯定不相同的。
      

  3.   

    fpsession_3和fpsession表的transcript字段类型大小想相不相同?
      

  4.   


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