sqlldr入库Oracle

来源:互联网 发布:mac安装win8无法上网 编辑:程序博客网 时间:2024/05/18 05:00
开发中常常遇到这种情况:
客户提供一个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$]
0 0