首页  >  文章  >  数据库  >  ORA-01002: 不按顺序获取

ORA-01002: 不按顺序获取

WBOY
WBOY原创
2016-06-07 17:36:162780浏览

ORA-01002:不按顺序获取

错误定位:
 
SQL> !oerr ora 01002
 01002, 00000, "fetch out of order"
 // *原因:此错误意味着已尝试从不再有效的游标
 //        进行提取。  请注意,PL/SQL 游标循环
 //        隐式进行提取,因此也可能导致此错误。
 //        导致此错误的可能原因有多种,包括:
 //        1)在检索到最后一行后从游标中获取
 //            并返回 ORA-1403 错误。
 //        2) 如果游标已使用 FOR UPDATE 子句打开,
 //              在之后获取已发出 COMMIT 将返回错误。
 //        3) 重新绑定 SQL 语句中的任何占位符,然后在重新执行语句之前发出
 //            fetch。
 // *操作: 1) Do在最后一行被
 //            检索后,不发出 fetch 语句 - 没有更多的行可以获取。
 //            2) 不要在游标的 fetch 循环中发出 COMMIT
 //
 //          3) 重新绑定后重新执行该语句,然后尝试
 //            再次获取。
 
SQL>

查看pl sql:

声明
 游标emp_cursor为
  select * from emp_text进行更新;
 v_object_name emp_text%rowtype;
开始
 打开emp_cursor;
 循环
  获取emp_cursor
进入 v_object_name;
    if emp_cursor%found then
      update emp_text
        set object_id =
            (emp_seq.nextval)
      其中 object_name = v_object_name.object_name;
   COMMIT;
    end if;
    当 emp_cursor%notfound 时退出;
  结束循环;
  关闭 emp_cursor;
 end;

正确写法:

声明
 游标emp_cursor为
  select * from emp_text进行更新;
 v_object_name emp_text%rowtype;
开始
 打开emp_cursor;
 循环
  获取emp_cursor
into v_object_name;
    if emp_cursor%found then
      update emp_text
        set object_id =
            (emp_seq.nextval)
      where object_name = v_object_name.object_name;
   结束 if;
    退出当 emp_cursor%notfound;
  结束循环;
  关闭 emp_cursor;
  COMMIT;
结束;

ORA-01002: 不按顺序获取

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn