sqlldr能导入mysql_sqlldr导入数据(以PostgreSql>>>Oracle为例)

1.在目标数据库中创建表

1.1点击源表,复制创建语句

b55b98d4538d6434910c6ac7479d4ac8.png

1.2 修改数据类型以匹配目标数据库,如:

字符串类型:character varying(20)>>>varchar2(20)

数字类型:numeric(19,2)>>>number(19,2)

时间戳:timestamp without time zone>>>timestamp或date

1.3 其他

一般字符串类型需要加长长度,不然有时会插不进去数据,不知为什么;

P和O数据库的not null default * 语句位置刚好相反;

2.导出csv格式数据

copy call to '/tmp/call.csv' DELIMITER ',' NULL '' CSV [QUOTE '"' FORCE QUOTE 跟这个表的所有列名]

71114aabea1e6ef7ae853566b24bd335.png

这样就可以将数据导出了,需要注意的是:

①有时数据量较大会出现导出失败,如

a7fe1ef8ee55de31d78ff55f9e49b4cc.png

解决办法:用select的方式导出

74a0483a5e186d0d14f1dab37ec0375f.png

②[QUOTE '"' FORCE QUOTE 跟这个表的所有列名的数组形式]

没用过,表示给每个列的数据都加上“”,在PostgreSql中,获取表的所有列名的数组形式的语句如下:

1 SELECTarray_to_string(array(2 select attname from pg_attribute where attrelid = '表名称' ::regclass and attnum > 0

3 and attisdropped = 'f'

4 ), ',') as name

有兴趣可以试试。

3.下载csv文件

693a9e607c5fdee183f8585f5a808e06.png

4.编辑*.ctl控制文件

1 loaddata2 CHARACTERSET UTF83 infile "/home/oracle/hthhf.csv"4 truncate

5 into tablet_yw_hthhf_old6 fields terminated by","7 OPTIONALLY ENCLOSED BY '"'

8 trailing nullcols9 (10 列名1 integerexternal ,11 列名2 timestamp "YYYY-MM-DD hh24:mi:ss" ,12 列名3,13 列名4 floatexternal14 )

表示将/home/oracle/hthhf.csv的数据传入表t_yw_hthhf_old中,用逗号分割。需要注意的是下面括号中的部分,字符串型不加修饰,整型和浮点型分别加integer/float external,日期加timestamp "YYYY-MM-DD hh24:mi:ss"。

5.上传csv和ctl文件至目标服务器(略);

6.在目标服务器切换成oracle用户,并执行一下命令:

sqlldr userid=用户名/密码 control=ctl文件的全路径;

比如我上传到/home/oracle下了,则control=/home/oracle/hthhf.ctl

7.其他问题

导入后需要查看目标数据库,检查是否全部导入,如果数据不全,或在执行命令时异常,需要查看与ctl文件同目录下的log,与ctl同名,里面会记录错误原因。目前见过的错误有:字段中的内容含有换行或字段长度不够等等,依次解决即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值