【问题标题】:Create trigger to update same table after insert插入后创建触发器以更新同一个表
【发布时间】:2021-12-25 00:38:30
【问题描述】:

我需要一些帮助来自动忽略表上的某些数据(插入后),以便它不处理这些记录:

CREATE or REPLACE TRIGGER "user"."trigger_name"
AFTER INSERT ON user.tab
FOR EACH ROW
BEGIN
    UPDATE tab
       SET :NEW.status = 'DONE'
     WHERE :NEW.type not in (1, 2)
       AND :NEW.status = 'NEW'
    COMMIT;
END trigger_name;

这是一个合适的方法吗?

非常感谢!

【问题讨论】:

  • 为什么不使用BEFORE INSERT 触发器?而不是在插入值后尝试编辑它们。

标签: sql oracle oracle11g triggers


【解决方案1】:

我认为您正在寻找类似以上的内容:

CREATE or REPLACE TRIGGER user.trigger_name
BEFORE INSERT ON user.table
FOR EACH ROW
BEGIN
    if :new.status = 'NEW' and :new.type not in (1,2) then
        :new.status = 'DONE';
    end if;
END trigger_name;

【讨论】:

    【解决方案2】:

    我建议您为列status 添加一个虚拟列,而不是创建数据库触发器。由于您可能会遇到不自觉地禁用触发器的情况。这可能会产生一些符合规则的数据,而其中一些则不符合。此外,通过这种方式,您将能够跟踪原始数据。

    所以,考虑应用以下 DDL 语句

    ALTER TABLE tab
    ADD (
         status2 AS (CASE 
                     WHEN status = 'NEW' AND type NOT IN (1,2) THEN 
                          'DONE' 
                     ELSE 
                          status 
                      END)
    );
    

    Demo

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多