SQL LOADER

数据导入

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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值