在Oracle 9i中,sqlldr增加了一个新的参数external_table。通过这个参数的generate_only选项,可以生成完整的外部表创建语句。
现在有一个sqlldr控制文件,内容如下:
load data
infile 'd:\sqldr\test.txt'
badfile 'd:\sqldr\test.bad'
discardfile 'd:\sqldr\test.dis'
append into table test
fields terminated by X'09'
trailing nullcols
(
id,
name
)
利用如下命令行生成完整的外部表创建语句:
C:\>sqlldr test/test@acf control=d:\sqldr\test.ctl external_table=generate_only
在c:\根目录下找到test.log文件,这个文件包括了非常详细的内容,找到相应部分
用于外部表的 CREATE TABLE 语句:
------------------------------------------------------------------------
CREATE TABLE "SYS_SQLLDR_X_EXT_TEST"
(
"ID" NUMBER(38),
"NAME" VARCHAR2(10)
)
ORGANIZATION external
(
TYPE oracle_loader
DEFAULT DIRECTORY TEST_DIR
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET ZHS16GBK
BADFILE 'TEST_DIR':'test.bad'
DISCARDFILE 'TEST_DIR':'test.dis'
LOGFILE 'test.log_xt' /*注意:这几个文件的路径不能有绝对路径,否则会抱错*/ READSIZE 1048576
FIELDS TERMINATED BY 0x'09' LDRTRIM
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS
(
"ID" CHAR(255)
TERMINATED BY 0x'09',
"NAME" CHAR(255)
TERMINATED BY 0x'09'
)
)
location
(
'test.txt'
)
)REJECT LIMIT UNLIMITED
这样就可以利用生成的语句创建外部表,运行上面的语句创建外部表
运行查询外部表以验证外部表创建是否成功!
select * from "SYS_SQLLDR_X_EXT_TEST"
结果如下:
ID NAME
1 a
2 b
3 c
4 d
5 e
6 f
至此,外部表创建完毕!!!