在ogg中手动同步数据遇到列映射的情况

来源:互联网 发布:淘宝开店交保证金流程 编辑:程序博客网 时间:2024/06/02 01:10

      这几天由于ogg版本bug导致数据同步出现问题,需要手动同步数据。
      检查目标表列和原表列顺序以及rep进程中的映射关系发现:

SQLEXEC (SPNAME aa.bb.cc,id lookup11,param ee)
       这是在ogg中调用一个存储过程后面映射列中有ff=lookup11.gg
其中aa是schema,bb是存储过程包,cc是包里的一个存储过程,ee是一个输入参数,他一般来自原表列,ff是目标端的表对应的列,lookup11.gg是存储过程转化后的输出结果,其中lookup11存在的意义就是让sql可以调用它.
检查这个存储过程发现该过程body中核心部分是一个decode函数,查了一下这个函数使用方法:
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
如下是一个示例:
decode(tmvn_code,'09','21','21','09',tmvn_code)
简单说来就是输入tmvn_code的值,如果是09 转换为21,如果是21转换为09,如果都不是保留tmvn_code的值
在ogg中手动同步数据若表结构一致,直接可以使用
insert into tablea as select * from tableb
遇到有列映射的情况要仔细对比是否有sqlexec、列映射顺序、列的类型、是否存在@strext@strnum等,
1,存在这个就要仔细核对所需的存储过程,如我文章中提到的这个列子
2.如果ogg map映射关系中写的很乱,就要一一对比目标端和ogg列对应。
3.若果该列在源端和目标端是不同的数据类型,需要用to_char,to_number等去转换
4.若村子@等就要搞清楚这些函数的意义转换成sql的函数。

0 0