PL/SQL 触发器和多次更新
Posted
技术标签:
【中文标题】PL/SQL 触发器和多次更新【英文标题】:PL/SQL Trigger and multiple updates 【发布时间】:2014-02-11 19:17:11 【问题描述】:我编写了一个触发器,它只允许更新产品价格,前提是它至少比成本高出 10%。当我更新一种产品价格时,它似乎正在工作,但是我需要它能够一次更新多个产品。有什么建议么?感谢任何可以提供帮助的人。
create or replace TRIGGER P_check
BEFORE UPDATE ON ProductCat
FOR EACH ROW
BEGIN
IF (:new.ListPrice < :old.TotalCost * 1.1) THEN
raise_application_error (-20500, :new.ListPrice || ' is too low so the price stays ' ||:old.ListPrice);
ELSE
dbms_output.put_line ('Price was updated and the new price is ' || :new.ListPrice);
END IF;
END;
【问题讨论】:
【参考方案1】:它应该可以正常工作。您将触发器定义为FOR EACH ROW
;因此,将为ProductCat
中更改的每一行调用您的触发器。
分享和享受。
【讨论】:
可悲的是不起作用。当我运行这样的事情时: UPDATE ProductCat SET listPrice = 200;触发器启动应用程序错误(因为 200 对于第一个值来说太小了)。然后,显示 output.put_line 说它更新了各种项目的价格(但它确实没有)。但是,如果我选择一个较大的值,例如 productcatalog1 SET listPrice = 5000;它可以工作,因为应用程序错误永远不会消失。 我的教授暗示我需要使用类似 :new 的东西。 := :老。解决这个问题,但我不明白 您是否提交了更改? 鲍勃,你这是什么意思?当我将其更改为 5000 时,listPrice 的值会发生变化。 当您引发异常时,会隐含回滚;因此,没有变化。所以 - 你需要想出一种方法,使用你的教授的建议,在不引发异常的情况下恢复更改。考虑一下。分享和享受。以上是关于PL/SQL 触发器和多次更新的主要内容,如果未能解决你的问题,请参考以下文章