经常做ETL,遇到一个小问题.一般写程序,无非是用游标或者是一条SQL搞定.
相对来说一条SQL更简洁,效率更高,不过业务逻辑过于复杂的时候,也只能用游标.
另外还有一种情况,如果有数据问题导致ETL出错,
用游标可以迅速定位到那一条记录,而且可以不用回滚(暂时不处理错误数据).我想综合两者的性能,既不想用游标降低了效率(非用不可的时候除外),又想在出错时迅速定位到那条记录,
查来查去,只找到了10g的一个新特性log errors可以满足.
(http://www.itpub.net/viewthread.php?tid=906901不知道的可以去看看)但我觉得还是有点麻烦,不知道高手们有项目中通常是怎么做的?是否有更高效的方法?

解决方案 »

  1.   

    恩,处理之前应该有一个人工分析的过程,把不合法的数据先处理掉,然后再去做其它运算.
    例如在数据抽取的时候,可考虑先放入中间表,然后把数据按照业务所要表达的真正类型严格进行转换,比如有些业务数据的时间字段是字符类型的,先把其转换date类型,不合法的串如'123456'将其剔除或者转换为某个时间,这样避免在该字段上的运算出错.
      

  2.   

    大的过程我一直不用游标,
    基本上要处理的表,我都会设计一个主键列,
    这个列相当于sql server中的identity,
    然后一次处理一条,也达到了游标的效果。
    如果出错,当然可以插日志表
      

  3.   

    我做ETL的习惯,把数据读取的操作全部写在函数里面,getValue(),在函数中如果数据出错,直接返回所在行,所在列的异常
      

  4.   

    1.我一般对于异常的情况 就是添加异常捕获 返回错误信息 sqlerrm
    2.对于数据查询不正确 我一般是查看数据 分析数据 在解决