我无法弄清问题在哪里。这是我的触发器 我的produkt表有属性:produktid,name,manufacturing_price,sale_price 我试图使销售价格为制造价格的1.1值
CREATE OR REPLACE TRIGGER "predajna_cena"
AFTER update of "MANUFACTURING_PRICE" on "PRODUKT"
begin
UPDATE PRODUKT SET SALE_PRICE = MANUFACTURING_PRICE*1.1;
end;
/
ALTER TRIGGER "predajna_cena" ENABLE;
apex显示对象状态无效
我无法改变制造价格 错误ORA-04098:触发' '无效且重新验证失败
感谢
答案 0 :(得分:2)
CREATE OR REPLACE TRIGGER "predajna_cena"
AFTER update of "MANUFACTURING_PRICE" on "PRODUKT"
begin
UPDATE PRODUKT SET SALE_PRICE = MANUFACTURING_PRICE*1.1;
end;
/
如果您能够使此触发器生效,则会在表"PRODUKT"
的每次更新后更新所有价格。可能不是你想要的。
对于这种情况,您应该使用BEFORE UPDATE ... FOR EACH ROW
触发器,在插入产品价格之前更改产品价格:NEW."SALE_PRICE" = :NEW."MANUFACTURING_PRICE"*1.1
。
这样的事可能:
CREATE OR REPLACE TRIGGER "predajna_cena" BEFORE UPDATE OF "MANUFACTURING_PRICE" ON "PRODUKT" FOR EACH ROW BEGIN :NEW.SET SALE_PRICE := :NEW.MANUFACTURING_PRICE*1.1; END;
未测试。小心拼写错误!
根据您的需要,其他选项将使用虚拟列而不是触发器来实现相同的结果。
DROP TRIGGER "predajna_cena"; ALTER TABLE "PRODUKT" DROP COLUMN "MANUFACTURING_PRICE"; ALTER TABLE "PRODUKT" ADD "MANUFACTURING_PRICE" GENERATED ALWAYS AS ("SALE_PRICE" * 1.1) VIRTUAL;
未测试。小心拼写错误!