本文介绍了如何使用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 bDECLARE
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更新游标记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!