一、SQL*LOADER简介
SQL*Loader是oracle提供的可以从多种平面文件中向数据库中加载数据的工具,使用sqlldr工具可以在很短的时间内向数据库中加载大量的数据,像把制作好的excel表格导入数据库,可以说非常方便。
二、SQL*LOADER使用
1、导入单列数据
导入单列数据不需要写分隔符
create table DF_001_20190118
(
ID VARCHAR2(30)
)
控制文件配置
cat o_input.ctl
load data
infile 'sql4.txt'
append into table dbadmin.df_004_20190118
(
id position(1:50)
)
导入语句
sqlldr userid=XXXXX/XXXX control=o_input.ctl log=input_001.log bad=input_001.bad
2、导入多行数据
LOAD DATA
INFILE *INTO TABLE BONUSFIELDS
TERMINATED BY ","
(ENAME,JOB,SAL)
BEGINDATA
SMITH,CLEAK,3904
ALLEN,SALESMAN,
2891WARD,SALESMAN,
3128KING,PRESIDENT,252
INFILE *INTO TABLE BONUSFIELDS
TERMINATED BY ","
(ENAME,JOB,SAL)
BEGINDATA
SMITH,CLEAK,3904
ALLEN,SALESMAN,
2891WARD,SALESMAN,
3128KING,PRESIDENT,252
三、SQL*LOADER控制文件参数
Load DATA
#表示加载数据。
#表示加载数据。
INFILE 'C:sqlldrolap.date_time_15_min.txt'
#INFILE指定数据文件,如果是INFILE *,表示加载的数据保存在控制文件中。
#INFILE指定数据文件,如果是INFILE *,表示加载的数据保存在控制文件中。
INTO TABLE test.date_time_15_min
#数据加载到的具体表名。
#数据加载到的具体表名。
APPEND|REPLACE|TRUNCATE
#如果没有这行,默认是INSERT操作,要求表必须为空,TRUNCATE操作非传统意义上的TRUNCATE TABLE DATE_TIME_15_MIN,而是执行TRUNCATE TABLE DATE_TIME_15_MIN REUSE STORAGE操作,这点需要注意。
#如果没有这行,默认是INSERT操作,要求表必须为空,TRUNCATE操作非传统意义上的TRUNCATE TABLE DATE_TIME_15_MIN,而是执行TRUNCATE TABLE DATE_TIME_15_MIN REUSE STORAGE操作,这点需要注意。
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
#数据的存储是以,符号作为分割,"符号引起来的表示字符串,这是定界加载,这是最传统的方式,另外还可以定长加载,这里我们不讨论。
#数据的存储是以,符号作为分割,"符号引起来的表示字符串,这是定界加载,这是最传统的方式,另外还可以定长加载,这里我们不讨论。
TRAILING NULLCOLS
#如果输入的数据不存在某列的数据,SQLLOADER就会为该列绑定一个NULL值。
#如果输入的数据不存在某列的数据,SQLLOADER就会为该列绑定一个NULL值。
(APPLIEDTIME "to_date(:appliedtime,'yyyy-mm-dd hh24:mi:ss')",
#以(符号开始表示表的字段,由于是日期字段,所以需要使用函数进行转换,函数必须用双引号引起来,:appliedtime是跟前面的APPLIEDTIME相对应。
#以(符号开始表示表的字段,由于是日期字段,所以需要使用函数进行转换,函数必须用双引号引起来,:appliedtime是跟前面的APPLIEDTIME相对应。
applieddate "to_date(:applieddate,'yyyy-mm-dd hh24:mi:ss')",
psvcode,
#如果字段没有指定存储类型,默认为CHAR(255),超过长度会收到Fileld in data file exceeds maximum length的报错,只需要根据长度指定类型,例如,CHAR(1000)。
hzpsvcode,
pointindex,
appliedhour "to_date(:appliedhour,'yyyy-mm-dd hh24:mi:ss')"
)
BEGINDATA
#下面是加载的数据,对应上面的INFILE *设置。
psvcode,
#如果字段没有指定存储类型,默认为CHAR(255),超过长度会收到Fileld in data file exceeds maximum length的报错,只需要根据长度指定类型,例如,CHAR(1000)。
hzpsvcode,
pointindex,
appliedhour "to_date(:appliedhour,'yyyy-mm-dd hh24:mi:ss')"
)
BEGINDATA
#下面是加载的数据,对应上面的INFILE *设置。