问题描述
大家都知道Oracle数据库表迁移的时候会使用 ‘imp/exp’ 命令以文件的形式进行,因为这样的效率比sql语句形式高出无数倍。
但是今天我在做表迁移时,遇到了一个奇怪的现象:
导入报错多样:字段长度不够啊,Date类型不符合啊,全部字段为空啊 等等;
解决问题
刚开始,我想着哪里报错就去修改哪里,把varchar2长度变大,先不导入date类型数据。
结果出现了更奇怪的现象:导入后数据增加了十几行。而且多出来的数据字段值对应不上。
多次思考后,想到了换行符问题。
- Oracle中的特殊符号:
- chr(9) 是制表符
- chr(10)是换行符
- chr(13)是回车
将字段中的特殊字符过滤掉:
- update table set fa=replace(fa,’ ‘,’’) ; — 除去空格符
- update table set fa=replace(fa,chr(10),’’) ; — 除去换行符
- update table set fa=replace(fa,chr(13),’’) ; — 除去回车符
重新导入,成功。
查看所有varchar2字段有无换行符
SELECT ‘SELECT count(*) from {tableName} where instr(’||column_name||’,chr(10))>0;’ from user_tab_columns
WHERE table_name=’{tableName}’ and data_type=‘VARCHAR2’
371

被折叠的 条评论
为什么被折叠?



