【发布时间】:2019-09-08 06:26:40
【问题描述】:
我试图让我的触发器在列出的任何列发生更改时触发。我希望 bb_prodchg_audit 表上的特定列在 bb_product 表上列出的任何列发生更改时更新。我的代码在我将列名添加到 INSERT INTO 行之前编译(尽管当任何列被更改时它实际上并没有导致触发器触发)但是一旦我添加了列名,我开始收到错误“错误(5 ,18):PLS-00201:必须声明标识符“PRODUCTNAME””、“错误(9,18):PLS-00201:必须声明标识符“PRICE””等等。
我是新手,对 PL/SQL 不太了解,我无法弄清楚如何声明标识符,或者这是否是解决这种情况的正确方法。
CREATE OR REPLACE TRIGGER BB_PRODCHG_AUDIT
AFTER UPDATE OF productname, price, salestart, saleend, saleprice ON bb_product
FOR EACH ROW
BEGIN
IF (UPDATING(productname)) THEN
INSERT INTO bb_prodchg_audit (userid, chg_date, name_old, name_new)
VALUES (USER, SYSDATE, :OLD.productname, :NEW.productname);
END IF;
IF (UPDATING(price)) THEN
INSERT INTO bb_prodchg_audit (userid, chg_date, price_old, price_new)
VALUES(USER, SYSDATE, :OLD.price, :NEW.price);
END IF;
IF (UPDATING(salestart)) THEN
INSERT INTO bb_prodchg_audit (userid, chg_date, start_old, start_new)
VALUES(USER, SYSDATE, :OLD.salestart, :NEW.salestart);
END IF;
IF (UPDATING(saleend)) THEN
INSERT INTO bb_prodchg_audit (userid, chg_date, end_old, end_new)
VALUES(USER, SYSDATE, :OLD.saleend, :NEW.saleend);
END IF;
IF (UPDATING(saleprice)) THEN
INSERT INTO bb_prodchg_audit (userid, chg_date, sale_old, sale_new)
VALUES(USER, SYSDATE, :OLD.saleprice, :NEW.saleprice);
END IF;
END;
为清楚起见进行编辑:我的目标是在 bb_product 表的每次更改时将 userID、sysdate 以及旧值和新值添加到 bb_prodchg_audit 表中。
【问题讨论】:
标签: oracle plsql plsqldeveloper