开发中常常遇到这种情况:
![]()
客户提供一个Excel数据,我们需要将其需要的字段提取到数据库,直接拷贝赋值太浪费时间。
1、利用Excel自带的强大的sql方法,将需要的列通过sql提取到新的Sheet页中
sql 语法:
select SGSN_ID,RNC_ID,LAC,CI, CITY_ID, CITY from [s_site$]
2、将新的excel文件保存为csv文件
3、编写ctl文件
4、打开命令窗口,执行sqlldr入库命令
命令格式:
sqlldr userid=kp/
kp@192.168.57.43
:1521/miq data=D:/area_data_temp/s_site.csv control=D:/area_data_temp/s_site.ctl log=D:/area_data_temp/s_site.log bad=D:/area_data_temp/s_site.bad readsize=20971520 bindsize=20971520 rows=10000000
简单命令:sqlldr userid=kp/kp@192.168.57.43:1521/miq data=D:/s_site.csv control=D:/s_site.ctl
5、编写bat文件直接双击运行sqlldr命令;直接将上面命令赋值到bat文件中即可
目录结构:
注意:
一、ctl文件格式:(truncate方式)
OPTIONS (SILENT=(ALL),DIRECT=TRUE)
UNRECOVERABLE
LOAD DATA INFILE 'D:/area_data_temp/s_site.csv'
TRUNCATE INTO TABLE S_SITE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(SGSN_ID,RNC_ID,LAC,CI,CITY_ID,CITY char(1024),ID SEQUENCE(MAX,1),CRT_TIME "sysdate")
(append方式)
OPTIONS (SILENT=(ALL),DIRECT=TRUE,PARALLEL=TRUE,SKIP_INDEX_MAINTENANCE=TRUE)
UNRECOVERABLE
LOAD DATA INFILE 'D:/area_data_temp/s_site.csv'
APPEND INTO TABLE S_SITE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(SGSN_ID,RNC_ID,LAC,CI,CITY_ID,CITY,ID SEQUENCE(MAX,1),CRT_TIME "sysdate")
编写ctl文件注意:
* 指定csv文件路径
* 指定表名
* 指定添加方式(truncate,append)
* 指定分割符(csv默认是用英文逗号分割)
* 指定表的列名(按照csv文件顺序来)
*
* ctl文件如果用到数据库函数则用双引号,如“sysdate”
* sqlldr默认字段长度为255,如果到插入超长文本则需要特殊指定;如上面的 CITY char(1024)
二、excel编写sql格式:
* select SGSN_ID,RNC_ID,LAC,CI, CITY_ID, CITY from [s_site$]
* 表名采用sheel页的名称+$,格式[s_site$]
* 如果列头中有非法字符,则用[]包起来查询;如:select LAC,CI, CITY_ID, [LAST NAME] from [s_site$]