Oracle11G虚拟列的一个典型应用场景

原创
2018/11/30 12:54
阅读数 499

需求背景:公司账单表(亿级数据量)一个账单日期字段(目前取商品下单日期),因报表统计需要,需要对该字段做逻辑判断是设置为账单生成日期、还是商品下单日期。同时此字段又是财务结算的依据字段,且不需要执行报表逻辑,统一按商品下单日期。

经过分析得出了以下两个方案:

1、报表修改统计口径,根据业务逻辑判断是根据下单日期统计还是账单生成日期统计,这样财务系统则不需要调整。但是经过分析,此方法会导致历史报表数据收入全部产生波动,不利于财务审计,如果以某个时间点做分隔分别做不同逻辑对报表改动又太大,最终放弃。

2、最终财务的方案二:在财务系统做调整,把现有的账单日期字段给报表使用,财务按照逻辑对改字段设置不同的值。同时新增字段财务结算账单日期,给财务系统使用。此方案报表不用做任何改动,且不用影响历史报表。财务改动也不大,只要替换字段即可。但是财务系统也存在更新历史数据的问题,上线时需要把新的财务结算账单日期字段更新为老的算账单日期字段值,而我司生产系统是24小时都没有这么长时间,可以用来做历史数据割接的。

针对以上需求,和DBA一起讨论,得到了最终技术实现方案:

新增字段财务结算账单日期的同时新增虚拟列:NVL(财务结算账单日期,账单结算日期)即可完美解决问题。具体脚本如下:

ALTER TABLE FA_BILL_INFO ADD FA_BILL_DATE DATE NULL;

ALTER TABLE FA_BILL_INFO ADD FA_BILL_DATE_VIR GENERATED ALWAYS AS(NVL(FA_BILL_DATE,BILL_DATE)) virtual;

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部