1

このブロックを実行すると、「ORA-01410: Invalid 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 CURRENT OF c_orders;
    EXIT WHEN c_orders%NOTFOUND; 
  END LOOP;  
  CLOSE c_orders; 
END; 

ただし、FOR IN 構文を使用すると、すべてが機能します。

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; 
4

1 に答える 1

4

exit whenを の前に移動しupdateます - 存在しないものは更新できません。

于 2012-11-03T08:27:02.670 に答える