PL/SQL触发器和多个更新

PL/SQL触发器和多个更新,sql,plsql,triggers,relational-database,Sql,Plsql,Triggers,Relational Database,我已经编写了一个触发器,它只允许在产品价格至少比成本高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

我已经编写了一个触发器,它只允许在产品价格至少比成本高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;

它应该很好用。为每一行定义了触发器;因此,将为ProductCat中更改的每一行调用触发器


分享和享受。

遗憾的是,这是行不通的。当我运行类似这样的操作时:更新ProductCat SET listPrice=200;触发器启动应用程序错误,因为200对于第一个值来说太小。然后,显示output.put_行,表示它更新了各种项目的价格,但实际上没有。但是,如果我选择一个较大的值,例如productcatalog1 SET listPrice=5000;它之所以有效,是因为应用程序错误从未发生过。我的教授暗示我需要使用如下内容:new.:=:古老的为了解决这个问题,但我不明白你是否提交了更改?鲍勃,你这是什么意思?当我将其更改为5000时,是的,listPrice的值会更改;因此,没有变化。因此,你需要想出一种方法,利用教授的建议,在不引发异常的情况下恢复更改。想一想。分享和享受。