【 使用环境 】测试环境
【 OB or 其他组件 】ob-loader-dumper-4.3.3.1-RELEASE
【 使用版本 】ob-loader-dumper-4.3.3.1-RELEASE
【问题描述】obloader导入数据时insert语句使用的插入字段用的是当时库中的表字段,而不是导出时data里的表字段
【复现路径】
下面是我导出来data中的insert语句
INSERT INTO “TBBANKACC1” (“BANK_NO”,“BANK_ACC”,“TA_CLIENT”,“IN_CLIENT_NO”,“CLIENT_TYPE”,“OPEN_BRANCH”,“ACC_STATUS”,“TRANS_DATE”,“SIGNOFF_DATE”,“TABLE_NUM”,“RESERVE1”,“RESERVE2”,“RESERVE3”,“CARD_TYPE”,“OPEN_NET_NO”,“CURR_TYPE”,“IS_PENSION_ACC”,“MAIN_CARD”,“ACCOUNT_NO”,“MOBILE”,“PRD_TYPES”,“VOUCHER_TYPE”,“REAL_BANK_ACC”,“CONTRACT_NO”,“ACCOUNT_SEQ_NO”) VALUES (‘000’,‘1001GR001’,‘2020012100000097’,‘2020012100000053’,‘1’,‘100’,‘0’,20200121,0,’ ‘,’ ‘,‘0’,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ');
假如我这个时候升级了表结构,也就是这个表多了一个字段,然后我再导入data
他会使用当前表里的表字段来进行插入,而不是使用我导出时的表字段,下面是bad日志里的内容
INSERT INTO “TBBANKACC1” (“BANK_NO”,“BANK_ACC”,“TA_CLIENT”,“IN_CLIENT_NO”,“CLIENT_TYPE”,“OPEN_BRANCH”,“ACC_STATUS”,“TRANS_DATE”,“SIGNOFF_DATE”,“TABLE_NUM”,“RESERVE1”,“RESERVE2”,“RESERVE3”,“CARD_TYPE”,“OPEN_NET_NO”,“CURR_TYPE”,“IS_PENSION_ACC”,“MAIN_CARD”,“ACCOUNT_NO”,“MOBILE”,“PRD_TYPES”,“VOUCHER_TYPE”,“REAL_BANK_ACC”,“CONTRACT_NO”,“ACCOUNT_SEQ_NO”,“MODIFY_DATE”)VALUES (‘000’,‘1001GR001’,‘2020012100000097’,‘2020012100000053’,‘1’,‘100’,‘0’,‘20200121’,‘0’,’ ‘,’ ‘,‘0’,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ');
Cause: The number of columns parsed does not match the number of columns in the table
但是后面的value还是之前导出时的value个数,他不会在最后自动补上一个字段的默认值
所以如果升级了表结构,就无法用之前导出的数据再进行导入了
我认为正确的情况应该是使用导出时的字段来进行导入,这样就不会有报错了
【附件及日志】