PL/SQL 更新当前的位置

PL/SQL Update where current of

如果出版商是 'x',我需要将一本书的价格提高 5%,对于其他出版商,我需要提高 10%。我需要使用 'where current of' 和 'returning into' 子句来完成。

DECLARE
CURSOR c1 IS SELECT book_id FROM books WHERE publisher = 'x';
CURSOR c2 IS SELECT book_id FROM books WHERE publisher != 'x';
BEGIN
UPDATE books SET price = price + 0.05 * price WHERE CURRENT OF c1;
UPDATE books SET price = price + 0.1 * price WHERE CURRENT OF c2;
END;

有没有比用 'when others' 做两个游标和两次更新更简单的方法?

为什么要把简单的事情搞复杂?只是做:

UPDATE books SET price = price + 0.05 * price WHERE publisher = 'x';
UPDATE books SET price = price + 0.1 * price WHERE publisher != 'x'

简单直接..

UPDATE books SET price =decode(publisher,'x'
                               ,price + 0.05 * price  -- If 'x'
                               ,price + 0.1 * price); -- else