我在某个表(例如 TABLE_TRIGGER)中创建了一个非常简单的触发器,它将调用一个过程(处理所有逻辑)。该表有一列(例如 AUDITID),我想在触发函数中排除,我的意思是,如果更新仅在AUDITID 列,不应执行该过程。
下面是触发器:
CREATE OR REPLACE TRIGGER TABLE_TRIGGER_FUNCTION
AFTER INSERT OR UPDATE
ON TABLE_TRIGGER
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
-- procedure();
END;
除了这里建议的方法之外,还有其他方法可以做到这一点:Oracle: excluding updates of one column for firing a trigger
这里提供的答案是我想要的Fire trigger on updates (excluding certain fields change)但我不确定这是否也可以使用 Oracle PL/SQL 语法来完成。
顺便说一句,我尝试通过排除 AUDITID 列来使用以下 WHEN 语句,但触发器根本不起作用,并且过程未执行。
WHEN (NEW.FILEID != OLD.FILEID OR
NEW.DESCRIPTION != OLD.DESCRIPTION OR
NEW.IMAGEID != OLD.IMAGEID OR
NEW.STATETYPEID != OLD.STATETYPEID OR
NEW.ACCESSLEVELID != OLD.ACCESSLEVELID OR
NEW.FILETYPEID != OLD.FILETYPEID)
最佳答案
我不知道如何从更新触发器中排除列,但您可以定义它将触发的列列表,并列出除之外的所有列审核ID
:
CREATE OR REPLACE TRIGGER TABLE_TRIGGER_FUNCTION
AFTER INSERT OR UPDATE
OF FILEID, -- Field list starts here...
DESCRIPTION,
IMAGEID,
STATETYPEID,
ACCESSLEVELID,
ACCESSLEVELID,
FILETYPEID -- ... and ends here
ON TABLE_TRIGGER
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
-- procedure();
END;
关于oracle - 如何在触发器函数中排除数据库列 (Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37924714/