表正在变异,触发器/功能可能看不到/ ORA-04088:执行触发器时出错

时间:2018-10-02 03:52:40

标签: oracle plsql

以下是我的触发器,我很难实施。它创建触发器,但是在我更改价格后出现错误。以下触发器是在表DAYCARE的任何行上都有价格更改(更新)时向DAYCARE_PRICE表添加一行。

CREATE OR REPLACE TRIGGER daycare_price_history_trg
BEFORE UPDATE ON DAYCARE
FOR EACH ROW
BEGIN
    IF :NEW.price != :OLD.price THEN 
        INSERT INTO DAYCARE_PRICE(daycare_id, old_price, new_price, date_of_change)
        SELECT daycare_id, :NEW.price, :OLD.price, SYSDATE
        FROM DAYCARE;
    END IF;
END;

1 个答案:

答案 0 :(得分:1)

使用VALUES子句,而不要从表(触发器所有者)中进行选择。

CREATE OR REPLACE TRIGGER daycare_price_history_trg BEFORE
     UPDATE ON daycare
     FOR EACH ROW
BEGIN
     IF
          :new.price !=:old.price
     THEN
          INSERT INTO daycare_price (
               daycare_id,
               old_price,
               new_price,
               date_of_change
          ) VALUES (
               :new.daycare_id,
               :old.price,
               :new.price,
               SYSDATE
          );
     END IF;
END;
/