用forall的save exceptions机制高效处理数据交换中的异常数据

在一个数据交换场景中,对方提供一个远程数据库,我方根据时间戳提取增量数据,经转换处理后存到我方数据库的表中。

对方数据有以下特征:

1.增量数据数量较大;
2.数据不规范,部分数据无法直接写入我方数据库。

考虑有以下几个方法来处理:

方案一、对每条数据loop循环处理,写入错误则记录后跳过;
方案二、在insert时对数据进行函数校验,符合条件的才写入;

仔细考虑这2中方案:
方案一对每条记录做loop循环无疑耗费了大量时间在远程链路上,对于数据量较大的情况时间代价太大。
方案二如果校验比较复杂,则用于函数校验的成本也很大;再者对错误数据的处理可能会造成更多的工作量。

详细分析后,我们提出使用forall的save exception机制来处理这个场景。
假设对方数据库远程链接名是db2,远程表t_exch结构如下:

SQL> desc t_exch
Name       Type           Nullable Default Comments 
---------- -------------- -------- ------- -------- 
GUID       VARCHAR2(50)                             
NAME       VARCHAR2(30)   Y                         
STIME      VARCHAR2(20)   Y                         
ETIME      VARCHAR2(20)   Y                         
CONTENT    VARCHAR2(4000) Y                         
STATUS     VARCHAR2(1)    Y                         
CREATEDATE DATE           Y                         
MOBILE     VARCHAR2(20)   Y                         

SQL> select * from t_exch where rownum<5; 
GUID                                               NAME                           STIME                ETIME                
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值