如何使用WHERE CURRENT OF更新游标记录? [英] How to update cursor records using WHERE CURRENT OF?

查看:755
本文介绍了如何使用WHERE CURRENT OF更新游标记录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

执行此块时,我收到ORA-01410:ROWID无效异常。任何想法为什么?

  DECLARE 
CURSOR c_orders IS
SELECT * from orders FOR UPDATE OF no;
v_order_record c_orders%ROWTYPE;
BEGIN
OPEN c_orders;
LOOP
FETCH c_orders INTO v_order_record;
UPDATE orders SET no = 11 where c_order;
退出当c_orders%NOTFOUND;
END LOOP;
CLOSE c_orders;
END;但是,如果使用FOR IN语法,一切都会奏效:








$ b b

  DECLARE 
CURSOR c_orders IS
SELECT * from orders FOR UPDATE OF no;
BEGIN
FOR rec IN c_orders
LOOP
UPDATE命令SET no = 11当前的c_orders;
END LOOP;
END;


解决方案

/ code>到更新之前 - 您不能更新不存在的内容。


I'm getting "ORA-01410: Invalid ROWID" exception when executing this block. Any ideas why?

DECLARE
  CURSOR c_orders IS
    SELECT * from orders FOR UPDATE OF no;
  v_order_record c_orders%ROWTYPE;
BEGIN
  OPEN c_orders; 
  LOOP
    FETCH c_orders INTO v_order_record;
    UPDATE orders SET no = 11 WHERE CURRENT OF c_orders;
    EXIT WHEN c_orders%NOTFOUND; 
  END LOOP;  
  CLOSE c_orders; 
END; 

However, everything works if using FOR IN syntax:

DECLARE
  CURSOR c_orders IS
    SELECT * from orders FOR UPDATE OF no;
BEGIN
  FOR rec IN c_orders
  LOOP
    UPDATE orders SET no = 11 WHERE CURRENT OF c_orders;
  END LOOP; 
END; 

解决方案

Move the exit when to before the update - you can't update something that doesn't exist.

这篇关于如何使用WHERE CURRENT OF更新游标记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆