Oracle数据导入导出imp/exp的坑——多了十几行?

问题描述

  大家都知道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’

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值