目录
- SQLLDR导入
- 1.简介
- 2.语法和参数
- 3. 范例
- 4.Sqlldr 有两种使用方式
- 其他
SQLLDR导入
1.简介
SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。
2.语法和参数
语法: SQLLDR keyword=value [,keyword=value,…];
Sqlldr 参数一览
3. 范例
利用PLSQL生成测试数据cux_sqlldr_test.txt
BEGIN
FOR iIN1..100
LOOP
IFMOD(i,2)=1THEN
dbms_output.put_line(\’\”\’||i||\’\”,\”column1_\’||i||\’\”,\’||\’\”column2_\’||i||\’\”,\’||\’\”column3_\’||i||\’\”,\’||\’\”show_column_\’||i||\’\”,\’||\’\”hide_column_\’||i||\’\”,\”2017-01-01\”\’);
ELSE
dbms_output.put_line(\’\”\’||i||\’\”,\”column1_\’||i||\’\”, ,\’||\’\”column3_\’||i||\’\”,\’||\’\”show_column_\’||i||\’\”,\’||\’\”hide_column_\’||i||\’\”\’);
ENDIF;
ENDLOOP;
END;
建表
CREATETABLE cux.cux_sqlldr_test
(line_num NUMBER,
seq_num NUMBER,
column1 VARCHAR2(30),
column2 VARCHAR2(30)NOTNULL,
column3 VARCHAR2(30)DEFAULT\’column2\’,
show_column VARCHAR2(30),
hide_column VARCHAR2(30),
creation_date DATE
);
CREATEORREPLACE SYNONYM apps.cux_sqlldr_test FOR cux.cux_sqlldr_test;
CREATESEQUENCE cux.cux_sqlldr_test_sSTARTWITH10001;
CREATEORREPLACESYNONYM apps.cux_sqlldr_test_s FOR cux.cux_sqlldr_test_s;
4.Sqlldr 有两种使用方式
(1)在控制文件中包涵数据.
创建一个文件命名为cux_sqlldr_test.ctl,在服务器下创建目录Sqlldr,在sqlldr下创建log和bad文件夹,
上传cux_sqlldr_test.ctl至服务器 ,如下图所示:
cux_sqlldr_test.ctl内容如下:
OPTIONS (skip=3,rows=128)
load data
CHARACTERSET ZHS16GBK
infile *
badfile \”/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad\”
discardfile \”/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc\”
TRUNCATE into table cux_sqlldr_test
WHEN column1 != \”column1_1\”
Fields terminated by \”,\”
Optionally enclosed by \’\”\’
TRAILING NULLCOLS
(
line_num RECNUM ,
seq_num \”cux_sqlldr_test_s.nextval\” ,
column1 ,
column2 ,
column3 NULLIF (column3=\”column3_4\”),
show_column \”UPPER(:show_column)\” ,
hide_column FILLER ,
creation_date DATE \’YYYY-MM-DD\’ \”CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,\’YYYY-MM-DD\’) ELSE :creation_date END\”
)
BEGINDATA
\”1\”,\”column1_1\”,\”column2_1\”,\”column3_1\”,\”show_column_1\”,\”hide_column_1\”,\”2017-01-01\”
\”2\”,\”column1_2\”, ,\”column3_2\”,\”show_column_2\”,\”hide_column_2\”
\”3\”,\”column1_3\”,\”column2_3\”,\”column3_3\”,\”show_column_3\”,\”hide_column_3\”,\”2017-01-01\”
\”4\”,\”column1_4\”, ,\”column3_4\”,\”show_column_4\”,\”hide_column_4\”
\”5\”,\”column1_5\”,\”column2_5\”,\”column3_5\”,\”show_column_5\”,\”hide_column_5\”,\”2017-01-01\”
\”6\”,\”column1_6\”, ,\”column3_6\”,\”show_column_6\”,\”hide_column_6\”
\”7\”,\”column1_7\”,\”column2_7\”,\”column3_7\”,\”show_column_7\”,\”hide_column_7\”,\”2017-01-01\”
\”8\”,\”column1_8\”, ,\”column3_8\”,\”show_column_8\”,\”hide_column_8\”
\”9\”,\”column1_9\”,\”column2_9\”,\”column3_9\”,\”show_column_9\”,\”hide_column_9\”,\”2017-01-01\”
\”10\”,\”column1_10\”, ,\”column3_10\”,\”show_column_10\”,\”hide_column_10\”
运行命令
sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log
查看结果
查看表
由上图可以看出,运行命令后,在file文件夹下生成了cux_sqlldr_test.log,在bad下生成了cux_sqlldr_test.bad,在表中生成了3条记录,下面分析一下cux_sqlldr_test.ctl的内容和结果
表2
从日志可以看出7条数据中,4条记录无法没导入的原因。
查看cux_sqlldr_test.bad,其中记录4条错误的数据。
(2)在控制文件中不包涵数据.
上传cux_sqlldr_test.txt,cux_sqlldr_test.ctl至服务器,cux_sqlldr_test.txt由上面PLSQL脚本生成,cux_sqlldr_test.ctl如下
OPTIONS (skip=3,rows=128)
load data
CHARACTERSET ZHS16GBK
infile \”/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.txt\”
badfile \”/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad\”
discardfile \”/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc\”
TRUNCATE into table cux_sqlldr_test
WHEN column1 != \”column1_4\”
Fields terminated by \”,\”
Optionally enclosed by \’\”\’
TRAILING NULLCOLS
(
line_num RECNUM ,
seq_num \”cux_sqlldr_test_s.nextval\” ,
column1 ,
column2 \”nvl(:column2,\’***\’)\”,
column3 NULLIF (column3=\”column3_4\”),
show_column \”UPPER(:show_column)\” ,
hide_column FILLER ,
creation_date DATE \’YYYY-MM-DD\’ \”CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,\’YYYY-MM-DD\’) ELSE :creation_date END\”
)
运行命令
sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log
100条数据由于skip = 3 从第4条开始处理变成97条,第四条数据由于WHEN column1 != "column1_4"
被丢弃在bad的cux_sqlldr_test.disc路径下,没有错误数据。查看表共96条数据,如下图所示:
column2 "nvl(:column2,'***')", 对于 column2默认为 “***” .
其他
此外,sqlload可以实现同时加载多个文件,同时把数据加载到多个表。
到此这篇关于Oracle的SQLLDR用法简介的文章就介绍到这了,更多相关Oracle SQLLDR内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!