数据导入
1.控制文件内容如下:
(1) LOAD DATA
(2) INFILE *
(3) INTO TABLE DEPT [INSERT|TRUNCATE|APPEND|REPLACE|]
(4) FIELDS TERMINATED BY ',' [WHITESPACE] [OPTIONALLY ENCLOSED BY '"'] [TRAILING NULLCOLS]
fields terminated by X'09' --以X'09'为分隔符,是一个制表符(TAB) 其它还有X'07'
(5) (DEPTNO, DNAME, LOC ) [filler] [ position(1:2)] [column date 'yyyymmdd'] [column char (255)]
(6) BEGINDATA
(7) 10,Sales,Virginia
(8) 20,Accounting,Virginia
(9) 30,Consulting,Virginia
(10) 40,Finance,Virginia
LOAD DATA (1):这会告诉SQLLDR要做什么(在这个例子中,则指示要加载数据)。SQLLDR还可以执行CONTINUE_LOAD,也就是继续加载。只有在继续一个多表直接路径加载时才能使用后面这个选项。
INFILE * (2):这会告诉SQLLDR所要加载的数据实际上包含在控制文件本身上,如第6~10行所示。也可以指定包含数据的另一个文件的文件名。如果愿意,可以使用一个命令行参数覆盖这个INFILE语句。要当心,命令行选项总会涵盖控制文件设置。
INTO TABLE DEPT (3):这会告诉SQLLDR要把数据加载到哪个表中(在这个例子中,数据要加载到DEPT表中)。
FIELDS TERMINATED BY ‘,’(4):这会告诉SQLLDR数据的形式应该是用逗号分隔的值。为SQLLDR描述输入数据的方式有数十种;这只是其中较为常用的方法之一。
(DEPTNO, DNAME, LOC) (5):这会告诉SQLLDR所要加载的列、这些列在输入数据中的顺序以及数据类型。这是指输入流中数据的数据类型,而不是数据库中的数据类型。在这个例子中,列的数据类型默认为CHAR(255),这已经足够了。
默认的加载选项是INSERT(而不是APPEND、TRUNCATE或REPLACE)。要执行INSERT, SQLLDR就认为表为空。如果想向DEPT表中增加记录,可以指定加载选项为APPEND;或者,为了替换DEPT表中的数据,可以使用REPLACE或TRUNCATE。REPLACE使用一种传统DELETE语句;因此,如果要加载的表中已经包含许多记录,这个操作可能执行得很慢。TRUNCATE则不同,它使用 TRUNCATE SQL命令,通常会更快地执行,因为它不必物理地删除每一行。但是TRUNCATE 不能回退。
OPTIONALLY ENCLOSED BY '"' 指部分字段可以用双引号包起来。
TERMINATED BY WHITESPACE会解析这个串,查找空白符(制表符、空格和换行符)的第一次出现,然后继续查找,直至找到下一个非空白符。
加载这样的定界数据时,很可能想逃过输入记录中的某些列。例如,你可能加载字段1、3和5,而跳过第2列和第4列。为此,SQLLDR提供了FILLER关键字。这允许你映射一个输入记录中的一列,但不把它放在数据库中。
通常会有一个有某个外部系统生成的平面文件,而且这是一个定长文件,其中包含着固定位置的数据(positional data)。不用使用FIELDS TERMINATED BY子句。
TRAILING NULLCOLS 如果输入记录中不存在某一列的数据,SQLLDR就会为该列绑定一个NULL值。
[column date 'yyyymmdd'] 控制文件中使用DATE数据类型,并指定要使用的日期掩码。这个日期掩码与数据库中TO_CHAR和TO_DATE中使用的日期掩码是一样的。
[column char (255)]默认的输入字段长度为255字符。如果你的字段比这要长,就会将收到一个错误消息,这并不是说这个数据无法放在数据库列中;而是说,它指示SQLLDR希望有不少或等于255字节的输入数据,不过稍多一些也会接收。对此解决方案很简单,只需在控制文件中使用CHAR(N),在此N要足够大,能容纳输入文件中最长的字段长度。
SQLLDR的许多选项既可以放在控制文件中,也可以在命令行上使用。例如,可以使用INFILE FILENAME,也可以使用SQLLDR…DATA=FILENAME。命令行会覆盖控制文件中的任何选项。不能指望一定会使用控制文件中的选项,因为执行SQLLDR的人可能会通过命令行覆盖这些选项。
2.ctl文件范例
Load data
infile 'e:\l\data.txt'
into table t1
fields terminated by '|'
TRAILING NULLCOLS
(
C1 char(400),
C2 date 'yyyymmdd'
)
3.相关命令
在NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload
F:\oracle>SQLLDR SCOTT/TIGER CONTROL=TEST.CTL
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23577591/viewspace-682502/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23577591/viewspace-682502/