暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle sql*loader 与数据文件有关的子句

原创 不吃草的牛_Nick 2023-06-27
276

可使用几个子句来指定使用SQL*Loader装载数据时,数据文件的位置和其他属性。
•数据文件说明
使用INFILE参数说明输入数据文件的名字和位置:
INFILE='/aoi/app/oracle/oradata/load/consumer.dat'

如果不想使用INFILE说明,可以把数据包含在控制文件中。在将数据包含在控制文件而不是独立的输入文件中时,省略文件位置并使用*表示,如下所示:
INFILE = *

如果选择让数据在控制文件中,则必须在数据的前面使用BEGINDATA子句:
BEGINDATA
NichOLas Alapati,243 New Highway,Irving,TX,75078
......

•物理和逻辑记录
默认情况下,源数据文件中的每个物理记录等同于一个逻辑记录,但控制文件也可规定将多个物理记录组成一个逻辑记录。例如,在下面的输入文件中,三个物理记录被视为三个逻辑记录:
NichOLas Alapati,243 New Highway,Irving,TX,75078
Shannon Wilson,1234 Elm Street,Fort Worth,TX,98765
Nina Alapati,2629 Skinner Drive,Flower Mound,TX,75028

可在控制文件中使用两个参数中的任一个来转换这三个物理记录,这两个参数分别是: CONCATENATE 子句和 CONTINUEIF 子句。如果输入为固定格式,则可以用下面的方法为每个逻辑记录指定读入数据的行数:
CONCATENATE 4

这个CONCATENATE子句组合了4个数据行。如果每个数据行有80个字符,则所创建的新逻辑记录的总字符数为320。因此,在使用CONCATENATE子句时,还应该指定一个记录长度子句(RECLEN)。这里,记录长度子句如下:
RECLEN 320

CONTINUEIF子句通过在指定的位置指定一个或多个字符,允许组合物理记录到逻辑记录。如下所示:
CONTINUEIF THIS(1:4) = 'next'

在上行中,CONTINUEIF子句表示,如果SQL*Loader在某行的开始处发现4字符next,则应该把后跟的数据作为前一行的继续(4个字符和词next是任意的,连续标记可以为任意字符)。

如果使用固定格式的数据,则CONTINUEIF字符可放在最后一列中,如下所示:
CONTINUEIF LAST = '&'

这一行表示,如果SQL*Loader在某行的行尾遇到(&)字符,它将把后续的行作为前面行的延续。

注解 使用CONTINUEIF或CONCATENATE都会降低SQL*Loader的执行速度,所以最好是一对一地映射物理记录和逻辑记录.这祥做的原因是,如果联结不止一个物理记录构造一个逻辑记录,则SQL*Loader必须对输入数据进行额外的扫描,这要多花时间.
•记录格式
可以用以下三种方式之一指定记录格式。
(1) 流记录格式(stream record format):这是最常用的记录格式,它使用一个记录终止符来指示记京的结束。在SQL*Loader扫描输入文件时,如果遇到指定的终止符串,就会知道已经到达记录尾。如果未指定终止符串,则最后一个字符默认为新行符或换行符(在Windows上,换行跟在回行之后)。前面例子中的三个记录都使用这种记录格式。
(2) 可变记录格式(variable record format):在这种格式中,在每个记录开始处明确地给出长度,如下所示:
INFILE 'examplei.dat' "var 2"
06sammyyl2johnson,1234
这个行包含两个记录:第一个记录有6个字符(sammyy),第二个记录有12个字符 (johnson, 1234).var 2指出数据记录是町变尺寸的,记录尺寸指示符被指定为一个长度为2的 字段,在每个新记录之前。
(3) 固定记录格式(fixed record fbrmat):在这种格式中,指定所有记录尺寸是固定的。下面的一个例子中,每个记录长为12字节:
INFILE 'examplei.dat' "fix 12"
sammyy,1234, johnso,1234

初看上去,这个例子中记录似乎包含了整行(sammyy.1234. Johnso.1234),但fix 12表示此行中实际有两个12字节的记录。因此,在使用固定记录格式时,源数据文件中每行上可能有几个记录。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论