你好,游客 登录 注册 搜索
背景:
阅读新闻

[Oracle] SQL*Loader 详细使用教程

控制文件

[日期:2013-08-11] 来源:Linux社区  作者:dbanote [字体: ]

控制文件是SQL*Loader里最重要的文件,它定义数据文件的位置、数据的格式、以及配置数据加载过程的行为,本节介绍控制文件的配置参数。

在控制文件里配置命令行参数 (OPTIONS)

可以使用OPTIONS在控制文件里配置命令行参数,如下所示:

 

OPTIONS (BINDSIZE=100000, SILENT=(ERRORS, FEEDBACK) )

配置数据文件(INFILE)

 

利用INFILE可以配置一个或多个数据文件,如果配置多个数据文件,还可以为每个数据文件分别配置坏文件和丢弃文件,如下所示:

 

INFILE  mydat1.dat  BADFILE  mydat1.bad  DISCARDFILE mydat1.dis 
INFILE  mydat2.dat 
INFILE  mydat3.dat  DISCARDFILE  mydat3.dis 
INFILE  mydat4.dat  DISCARDMAX  10 0

如果数据包含在控制文件里,可以用*表示,如:

 

 

INFILE  *

并用BEGINDATA来标识哪些是数据:

 

 

BEGINDATA 
data

配置坏文件(BADFILE)

 

以下三种情况将导致记录进入到坏文件:

1. INSERT时发生Oracle错误

2. 数据加载时格式有误

3. 违反约束

配置丢弃文件(DISCARDFILE)

被丢弃的记录是指不符合WHEN定义的记录,你还可以利用DISCARDMAX配置允许丢弃的最大数,如果超过该数目,将停止加载

配置表名(INTO TABLE)及加载方式(INSERT, APPEND, REPLACE, TRUNCATE)

默认情况下,目标表必须是空表(即INSERT方式),否则会报错,如果目标表为非空表,则必须指定如下三种方式的一种:

1. APPEND:添加数据至源数据的后面

2. REPLACE:在添加数据之前,先执行DELETE FROM TABLE把表清空,注意:这里的REPLACE是表级别的替代,而不是行级别

3. TRUNCATE:在添加数据之前,先执行TRUNCATE TABLEtable_nameREUSE STORAGE

如果你想把记录插入到多个表中,可以使用多个INTO TABLE,如:

 

1 50   Manufacturing       — DEPT record 
2 1119 Smith      50       — EMP record 
2 1120 Snyder     50 
1 60   Shipping 
2 1121 Stevens    60 
我们可以根据第一列的值的不同分别插入两个不同的表:
INTO TABLE dept 
   WHEN recid = 1 
   (recid  FILLER POSITION(1:1)  INTEGER EXTERNAL,
    deptno POSITION(3:4)  INTEGER EXTERNAL, 
    dname  POSITION(8:21) CHAR) 
INTO TABLE emp 
   WHEN recid <> 1 
   (recid  FILLER POSITION(1:1)   INTEGER EXTERNAL,
    empno  POSITION(3:6)   INTEGER EXTERNAL, 
    ename  POSITION(8:17)  CHAR, 
    deptno POSITION(19:20) INTEGER EXTERNAL) 

 

筛选记录(WHEN)

用WHEN字句筛选需要的记录,不符合WHEN条件的将被丢弃,如:

 

WHEN (deptno = '10') AND (job = 'SALES') 

 

TRAILING NULLCOLS

告诉SQL*Loader如果记录的列少于目标表的列,则用NULL代替,如:

 

INTO TABLE dept 
    TRAILING NULLCOLS 
( deptno CHAR TERMINATED BY " ", 
  dname  CHAR TERMINATED BY WHITESPACE, 
  loc    CHAR TERMINATED BY WHITESPACE 
) 

记录格式如下:

 

 

10 Accounting 

对于如上的这条记录,loc列的值为NULL。

 

 

数据字段配置

字段属性的设置包括:位置、数据类型、条件、分隔符等。

数据字段的偏移量(POSITION)

指示从哪个字符开始,到哪个字符结束,如:

 

ename  POSITION (1:20)  CHAR 
empno  POSITION (22-26) INTEGER EXTERNAL 
allow  POSITION (*+2)   INTEGER EXTERNAL TERMINATED BY "/" 

上面的*是值上一个的末尾+偏移量1,也就是从27。

 

解析字段(FILLER)

解析字段并不真正导入到表中,而是作为逻辑判断的条件。

数据类型

默认的数据类型为CHAR,INTERGER表示二进制数据,INTERGER EXTERNAL表示字符数据

INTERGET(n), SMALLINT, FLOAT, DOUBLE, BYTEINT, ZONED, DECIMAL, VARCHAR, CHAR, Datetime and Interval

 

数据分隔符

有两种分隔符:

1. TERMINATED BY

2. ENCLOSED BY

下面是一些例子:

 

TERMINATED BY ','                      a data string, 
ENCLOSED BY '"'                        "a data string" 
TERMINATED BY ',' ENCLOSED BY '"'      "a data string", 
ENCLOSED BY '(' AND ')'                (a data string) 

字段条件 (WHEN, NULLIF, DEFAULTIF)

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

 

linux
【内容导航】
第1页:命令行参数 第2页:控制文件
相关资讯       Oracle教程  SQL*Loader 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款