【问题标题】:Trigger update with if condition使用 if 条件触发更新
【发布时间】:2017-03-13 08:48:14
【问题描述】:
create or replace
TRIGGER TR_SITECONTACT_UPDATE
AFTER  UPDATE OR INSERT  ON s_ct 
FOR EACH ROW
DECLARE
v_SID s_ct.sid%type;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN   
IF :NEW.CTID != :OLD.CTID THEN
      UPDATE CT
      SET lastupdatedon =sysdate,
        LASTUPDATESITE=:NEW.SID
      WHERE CTID  = :NEW.CTID;
COMMIT;
END IF;
END;

这里可以检查 lastupdatedCOF 是否为空,然后使用更新语句,在更新行之前,我需要检查 CT 表中的 lastupdatedCOF 是否为空。 IF Null 表示我需要使用下面的更新语句

UPDATE CT
      SET lastupdatedon =sysdate,
        LASTUPDATESITE=:NEW.SID
      WHERE CTID  = :NEW.CTID;
COMMIT;

lastupdatedCOF IS NOT NULL 表示

UPDATE CT
      SET lastupdatedon =sysdate,
        LASTUPDATESITE=:NEW.SID,
        lastupdatedCOF = NULL
      WHERE CTID  = :NEW.CTID;
COMMIT;

【问题讨论】:

  • 你为什么大喊大叫? (为什么它在 SQL 问题中如此普遍?)
  • @Biffen 我需要检查另一个表的条件??
  • 这需要大喊大叫?!你在桌子上生气吗?
  • 哈哈比芬。我正在尝试实现一个需要此查询的场景..
  • 编辑了您的问题,因为您似乎没有得到它。

标签: if-statement oracle11g triggers


【解决方案1】:

如果我阅读了您的问题,要么 lastupdatedCOF 为 null(在这种情况下,它仍然为 null),要么 lastupdated_cof 不为 null 并且您想将其设置为 null。

那么,为什么不总是将其设置为 null?

即:

create or replace
TRIGGER TR_SITECONTACT_UPDATE
AFTER  UPDATE OR INSERT  ON s_ct 
FOR EACH ROW
DECLARE
v_SID s_ct.sid%type;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN   
IF :NEW.CTID != :OLD.CTID THEN
      UPDATE CT
      SET lastupdatedon =sysdate,
        LASTUPDATESITE=:NEW.SID,
        lastupdatedCOF = NULL
      WHERE CTID  = :NEW.CTID;
COMMIT;
END IF;
END;

还有一点——你真的、真的需要自主交易吗?如果插入/更新 s_ct 表的事务被回滚 - 就目前情况而言,您将在 CT 表中留下一行已更改的行,尽管基础更改尚未发生。

【讨论】:

  • 嗨 Boneist,不使用自治事务如何提交更新语句?你认为没有编译指示就可以提交吗??
  • 提交或回滚不仅仅适用于单个语句,它适用于事务。这可能是一个 DML 语句,但也可能是一个系列。在您的情况下,事务将是 s_ct 表的插入/更新,然后是 ct 表的触发更新(顺便说一句,如果您的 :new.ctid 在 ct 表中不存在会发生什么?不会最好使用合并语句,而不是更新语句?)。当您提交或回滚事务时,您将同时提交或回滚两个语句。
  • 我建议你阅读the documentation。通常,您只想在想要发生某些事情时使用自治事务,而不管原始事务是提交还是回滚 - 例如记录错误(如果你在不同的事务中没有记录代码,当问题事务回滚时,你也会回滚错误记录!不理想...)
猜你喜欢
  • 2018-12-09
  • 2016-08-13
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多