取最新的数据:V_DATA_DATE = '99991231'
取当天的全量:V_DATA_DATE BETWEEN SDATE AND EDATE
取当天的增量:SDATE = V_DATA_DATE
流程:
1.判断是否重跑,如果重跑,将不应该存在的日期的数据删掉,当日的也要删,将闭链的数据重新开链
2.如果不是重跑,用目标表MINUS源表,得到上游系统删除了的数据并将其闭链,再用源表MINUS目标表,得到上游系统的增变量,将其插入到目标表,变化了的数据闭链
伪代码:
目标表:DT,源表 ST,临时表TT,主键PK,其他字段OCLM,开始日期SDATE,结束日期EDATE,跑批日期V_DATA_DATE,昨天V_LAST_DATE,99991231 V_EDATE
1.判断是否重跑 如果是,则需要删掉当天及以后所有新增的数据,修改掉当天及以后闭链了的数据
首先删掉所有新增的数据,包括当天的和当天以后的所有的
DELETE FROM DT WHERE SDATE>=V_DATA_DATE
然后修改掉当天及以后闭链了的数据,可采用先INSERT 再 DELETE 或者 UPDATE的方式,UPDATE的方式便于理解,但是效率较差,下面是INSERT 再DELETE 的方式将闭链数据重新开链
INSERT INTO DT
SELECT SDATE,V_EDATE,PK,OCLM
FROM DT
WHERE EDATE>=V_LAST_DATE AND ED