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是否为null然后使用update语句,在更新行之前我需要在CT表中检查lastupdatedCOF IS NULL或NOT。如果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;
答案 0 :(得分:0)
如果我读了你的问题,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表中留下一行已被更改的行,尽管没有发生根本的改变。