最近在项目遇到了oralce需要导入50多万条数据的需求,使用insert语句1万条数据差不多最快需要30秒,那么50次呢...效率太低。通过在网上查阅资料找到了一个比较高效的方法。具体操作如下:
1. 需要导入数据的表先创建好
比如说需要导入数据的表BJ_TD_TXBH有2列,字段为GUID、TXBH。
创建表的sql(没有考虑添加主键,如果添加主键GUID,那么要确保导入50万条的数据GUID唯一)
-- Create table
create table BJ_TD_TXBH
(
GUID varchar2(50),
TXBH varchar2(50)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 8
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column BJ_TD_TXBH.GUID
is ‘GUID‘;
comment on column BJ_TD_TXBH.TXBH
is ‘图形编号‘;
创建完成之后,查询没有数据。
2.创建好表之后,将需要导入的2列数据保存到.txt文件,使用逗号隔开。
txt文件插入13000条数据
将需要导入的2列数据排列格式效果如图(文件名为txbh.txt):
tip:
因为我这边提供的数据是从excel复制过来的,怎么将50多万条数据GUID和TXBH中间加逗号呢?
方法如图:
3.编写自动入库脚本.ctl
--编写 insert.ctl 文件
load data
characterset utf8
INFILE ‘D:/sql/txbh.txt‘
Append into table bj_td_txbh
fields terminated by ","
(
guid,txbh
)
上效果图,并语法解释:
编写好.ctl文件和.txt文件之后,放入到D:/sql文件中。
4.执行脚本
执行脚本语法:
sqlldr userid=用户名/密码@数据库实例名 control=脚本名
执行结果(测试插入了13000条数据):
5.注意事项
1.当时在服务器操作的时候,使用记事本打开.ctl文件之后可能会损坏文件格式,执行脚本会报错。建议使用编译器或者notepad++来进行操作。