PL/SQL 更新当前的

Posted

技术标签:

【中文标题】PL/SQL 更新当前的【英文标题】:PL/SQL Update where current of 【发布时间】:2015-06-25 02:07:28 【问题描述】:

如果出版商是“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;

有没有比使用“当其他人”之类的内容执行两个游标和两个更新更简单的方法?

【问题讨论】:

【参考方案1】:

简单直接..

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

【讨论】:

【参考方案2】:

你为什么要把一件简单的事情变得更复杂?做吧:

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

【讨论】:

以上是关于PL/SQL 更新当前的的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 更新加入?

在关闭pl/sql之前未提交的事物,会不会被默认提交?

pl/sql : 执行立即更新?

使用 PL/sql 函数进行 SQL 更新

PL/SQL 触发器更新或删除

更新/删除不存在的行时的 PL/SQL 异常