Oracle触发器记录字段值更新日志原创
金蝶云社区-angen
angen
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所示:

image.png

图1-1


image.png

图1-2



image.png

图1-3



销售订单变更单有审批流时的日志如下图1-4所示:

image.png

图标赞 15
15人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
1人打赏
还没有人打赏,快来当第一个打赏的人吧!