gpt4 book ai didi

oracle - 如何在触发器函数中排除数据库列 (Oracle)

转载 作者:行者123 更新时间:2023-12-02 10:52:08 25 4
gpt4 key购买 nike

我在某个表(例如 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com