Oracle触发器记录字段值更新日志原创
15人赞赏了该文章
130次浏览
编辑于2024年11月04日 16:51:43
星空系统中有些字段值莫名地错乱而且还不能重现,导致无法排查问题,可以借用触发器来添加日志辅助排查问题,本文演示通过Oracle触发器记录销售订单上的变更标志值更新日志。
--1,创建日志记录表
CREATE TABLE T_SAL_ORDERENTRY_FCHANGEFLAG ( ENTRYID NUMBER, OLD_VALUE VARCHAR2(2), NEW_VALUE VARCHAR2(2), UP_SQL NVARCHAR2(2000), --此字段目前暂时没有使用,后续可能会记录从哪个SQL触发字段更新 UP_TIME TIMESTAMP )
--2,创建触发器,根据条件向日志表 T_SAL_ORDERENTRY_FCHANGEFLAG 添加记录
CREATE OR REPLACE TRIGGER TR_ORDERECHANGEFLAG AFTER UPDATE OF FCHANGEFLAG OR INSERT OR DELETE ON T_SAL_ORDERENTRY FOR EACH ROW DECLARE OLD_COUNT NUMBER; NEW_COUNT NUMBER; BEGIN OLD_COUNT := COALESCE(:old.FENTRYID, 0); NEW_COUNT := COALESCE(:new.FENTRYID, 0); IF OLD_COUNT = 0 AND NEW_COUNT <> 0 THEN INSERT INTO T_SAL_ORDERENTRY_FCHANGEFLAG(ENTRYID, OLD_VALUE, NEW_VALUE, UP_SQL, UP_TIME) VALUES(:new.FENTRYID, '', :new.FCHANGEFLAG, '', CURRENT_TIMESTAMP); ELSIF OLD_COUNT <> 0 AND NEW_COUNT <> 0 THEN INSERT INTO T_SAL_ORDERENTRY_FCHANGEFLAG(ENTRYID, OLD_VALUE, NEW_VALUE, UP_SQL, UP_TIME) VALUES(:new.FENTRYID, :old.FCHANGEFLAG, :new.FCHANGEFLAG, '', CURRENT_TIMESTAMP); ELSIF OLD_COUNT <> 0 AND NEW_COUNT = 0 THEN INSERT INTO T_SAL_ORDERENTRY_FCHANGEFLAG(ENTRYID, OLD_VALUE, NEW_VALUE, UP_SQL, UP_TIME) VALUES(:old.FENTRYID, :old.FCHANGEFLAG, '', '', CURRENT_TIMESTAMP); END IF; END;
创建一张销售订单,保存、提交、审核后,下推一张销售订单变更单(老变更模式),保存、提交、审核变更单(销售管理系统参数勾选审核时自动生效),日志表如下图1-1到图1-3所示:
图1-1
图1-2
图1-3
销售订单变更单有审批流时的日志如下图1-4所示:
赞 15
15人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
1人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读