SqlLoader怎么使用

2020-07-10 08:04:34易采站长站整理

VIRGINIA
2000-5-1

如下控制文件加载数据无法导入


load data
infile *
into table dept
replace
fields terminated by ','
(deptno,
dname "upper(:dname)",
loc "upper(:loc)",
last_updated date 'dd/mm/yyyy',
entire_line ":deptno||:dname||:loc||:last_updated"
)
begindata
10,Accounting,Virginia,1/5/2000

1)TRAILING NULLCOLS的使用:一般默认用的好

    解决方法,就是使用TRAILING NULLCOLS。这样,如果输入记录中不存在某一列的数据,sqlldr就会为该列绑定一个null值。

这种情况下,增加TRAILING NULLCOLS会导致绑定变量:entire_line成为null。


load data
infile *
into table dept
replace
fields terminated by ','
TRAILING NULLCOLS
(deptno,
dname "upper(:dname)",
loc "upper(:loc)",
last_updated date 'dd/mm/yyyy',
entire_line ":deptno||:dname||:loc||:last_updated"
)
begindata
10,Accounting,Virginia,1/5/2000
select * from dept;
1 10 ACCOUNTING VIRGINIA 10AccountingVirginia1/5/2000 2000-5-1

2)case在sqlldr中的使用

假设输入文件中有以下格式的日期:
HH24:MI:SS:只有一个时间;日期时间默认为sysdate
DD/MM/YYYY:只有一个日期,时间默认为午夜0点
HH24:MI:SS DD/MM/YYYY:日期时间都显式提供

可用如下的控制文件


load data
infile *
into table dept
replace
fields terminated by ','
TRAILING NULLCOLS
(deptno,
dname "upper(:dname)",
loc "upper(:loc)",
last_updated
"case
when length(:last_updated)>9
then to_date(:last_updated,'hh24:mi:ss dd/mm/yyyy')
when instr(:last_updated,':')>0
then to_date(:last_updated,'hh24:mi:ss')
else to_date(:last_updated,'dd/mm/yyyy')
end"
)
begindata
10,Sales,Virginia,12:03:03 17/10/2005
20,Accounting,Virginia,02:23:54
30,Consulting,Virginia,01:24:00 21/10/2006
40,Finance,Virginia,17/8/2005
alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
select * from dept;

5、如何加载有内嵌换行符的数据

1)用非换行符的其它字符来表示换行符,并在加载时使用一个sql函数用一个CHR(10)替换该文本。


alter table dept add comments varchar2(4000);
--使用下列来加载文本
load data
infile *
into table dept
replace
fields terminated by ','
trailing nullcols
(deptno,
dname "upper(:dname)",
loc "upper(:loc)",
comments "replace(:comments,'n',chr(10))" --'n'换行符用chr(10)这个代替
)
begindata
10,Sales,Virginia,this is the salesnoffice in Virginia
相关文章 大家在看