基本 Oracle 触发器审计表
Posted
技术标签:
【中文标题】基本 Oracle 触发器审计表【英文标题】:Basic Oracle Trigger audit table 【发布时间】:2013-11-16 15:15:35 【问题描述】:我遇到了这个错误,不知道如何解决这个错误。所以请帮助我。
错误(8,11): PL/SQL: SQL 语句被忽略
错误(10,26):PL/SQL:ORA-00904:“NEWRETAILPRICE”:标识符无效
错误(17,8):PL/SQL:SQL 语句被忽略
错误(19,57):PL/SQL:ORA-00904:“NEWRETAILPRICE”:标识符无效
错误(25,6):PL/SQL:SQL 语句被忽略
错误(27,26):PL/SQL:ORA-00904:“OLDRETAILPRICE”:标识符无效
我的代码是
CREATE OR REPLACE TRIGGER product_audit
BEFORE INSERT OR DELETE OR UPDATE ON DD_Products
FOR EACH ROW
DECLARE
Var_ChangeType CHAR(1);
BEGIN
IF INSERTING THEN
VAR_ChangeType := 'I';
INSERT INTO DD_PriceChange
(PriceChangeNo, Change_Type, ChangeBy, ChangeDate,
NewProductPrice,NewRetailPrice)
VALUES (ProductHistory_SEQ.NEXTVAL, VAR_ChangeType, USER, SYSDATE,
:NEW.ProductPrice, :NEW.RetailPrice);
ELSIF UPDATING THEN
VAR_ChangeType := 'U';
INSERT INTO DD_PriceChange
(PriceChangeNo, Change_Type, ChangeBy, ChangeDate,
OldProductPrice,OldRetailPrice,NewProductPrice,NewRetailPrice)
VALUES (ProductHistory_SEQ.NEXTVAL, VAR_ChangeType, USER, SYSDATE,
:OLD.ProductPrice, :OLD.RetailPrice,:NEW.ProductPrice, :NEW.RetailPrice);
ELSE
VAR_ChangeType := 'D';
INSERT INTO DD_PriceChange
(PriceChangeNo, Change_Type, ChangeBy, ChangeDate,
OldProductPrice,OldRetailPrice)
VALUES (ProductHistory_SEQ.NEXTVAL, VAR_ChangeType, USER, SYSDATE,
:OLD.ProductPrice, :OLD.RetailPrice);
END IF;
END;
/
我创建了一个这样的表
Create table DD_PriceChange
(
PriceChangeNo NUMBER(5) PRIMARY KEY,
Change_Type CHAR(1),
ChangeBy VARCHAR2(20),
ChangeDate DATE,
OldProductPrice NUMBER(5),
NewProductPrice NUMBER(5),
OldRetailPrice NUMBER(5),
NewRetailPrice NUMBER(5)
);
和
CREATE SEQUENCE ProductHistory_SEQ;
请问有谁知道我为什么会收到这个错误。
【问题讨论】:
【参考方案1】:不知道您为什么会收到错误,但我剥离了所有内容并从基础重新构建触发器并使其正常工作:
CREATE OR REPLACE TRIGGER product_audit
BEFORE INSERT OR DELETE OR UPDATE ON DD_Products
FOR EACH ROW
DECLARE
VAR_ChangeType CHAR(1);
BEGIN
IF INSERTING THEN VAR_ChangeType := 'I';
ELSIF UPDATING THEN VAR_ChangeType := 'U';
ELSE VAR_ChangeType := 'D';
END IF;
INSERT INTO DD_PriceChange
(
PriceChangeNo,
Change_Type,
ChangeBy,
ChangeDate,
NewProductPrice,
NewRetailPrice,
OldProductPrice,
OldRetailPrice
) VALUES (
ProductHistory_SEQ.NEXTVAL,
VAR_ChangeType,
USER,
SYSDATE,
:NEW.ProductPrice,
:NEW.RetailPrice,
:OLD.ProductPrice,
:OLD.RetailPrice
);
END product_audit;
/
SQLFIDDLE
【讨论】:
以上是关于基本 Oracle 触发器审计表的主要内容,如果未能解决你的问题,请参考以下文章