Oracle 创建在更改任何指定列时触发的触发器
当列出的任何列被更改时,我试图触发触发器。我希望bb_产品表上列出的任何列发生更改时,bb_产品表上的特定列都会更新。在我将列名添加到INSERT INTO行之前编译的代码(虽然在任何列被更改时,它实际上不会导致触发器触发),但一旦我添加列名,我就开始出现错误“error(5,18):PLS-00201:必须声明标识符'PRODUCTNAME'”、“error(9,18)”:PLS-00201:标识符“价格”必须声明为“等” 我是新手,对PL/SQL不太在行,我很难弄清楚如何声明标识符,或者这是否是解决这种情况的正确方法Oracle 创建在更改任何指定列时触发的触发器,oracle,plsql,plsqldeveloper,Oracle,Plsql,Plsqldeveloper,当列出的任何列被更改时,我试图触发触发器。我希望bb_产品表上列出的任何列发生更改时,bb_产品表上的特定列都会更新。在我将列名添加到INSERT INTO行之前编译的代码(虽然在任何列被更改时,它实际上不会导致触发器触发),但一旦我添加列名,我就开始出现错误“error(5,18):PLS-00201:必须声明标识符'PRODUCTNAME'”、“error(9,18)”:PLS-00201:标识符“价格”必须声明为“等” 我是新手,对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;
为清晰起见进行编辑:我的目标是将userID、sysdate和新旧值添加到bb_prodchg_审计表中,每次更改bb_产品表 在
更新
谓词中,必须将列名指定为字符串。所以使用例如
IF UPDATING('SALEPRICE')...
而不是
IF UPDATING(SALEPRICE)...
请记住,列名区分大小写,在Oracle中默认为大写
祝您好运。在
更新
谓词中,必须将列名指定为字符串。所以使用例如
IF UPDATING('SALEPRICE')...
而不是
IF UPDATING(SALEPRICE)...
请记住,列名区分大小写,在Oracle中默认为大写
祝你好运。修复了一个问题,但又造成了另一个问题。我将所有的IF(更新)调整为'UPPER'格式,它跳到了“Error(8,39):PL/SQL:ORA-00904:“USERID”:无效标识符”。如果我将所有这些更改为'UPPER'格式,它会告诉我在插入到's'的所有位置都缺少SELECT关键字。请注意,我缺少下划线。谢谢你的帮助!修复了一个问题,但造成了另一个问题。我将所有的IF(更新)调整为'UPPER'格式,它跳到了“Error(8,39):PL/SQL:ORA-00904:“USERID”:无效标识符”。如果我将所有这些更改为'UPPER'格式,它会告诉我在插入到's'的所有位置都缺少SELECT关键字。请注意,我缺少下划线。谢谢你的帮助!