Oracle的SQLLDR是用来将文本文件中的记录装载到数据库中的工具, 其并行(Parallel),直接(Direct)的装载模式是目前所知最快的方式. 不过用于指定文本格式的控制文件有点难于写, 我在写时也经常需要查阅文档. 为了方便我还是在这儿写一个例子吧, 下面是样表的结构:
SQL> create table test(
2 num_col number(10),
3 char_col char(10),
4 var_col varchar2(10),
5 date_col date,
6 blob_col blob,
7 clob_col clob,
8 raw_col raw(20)
9 );
Table Created.
在这个例子中有CLOB/BLOB列, 因此直接模式不能用, 还需要将ROWS参数设为1, 下面是SQLLDR用的控制文件:
--
-- Generated by AUL/MyDUL, for table hr.test
--
OPTIONS(DIRECT=TRUE,READSIZE=4194304,ERRORS=-1,SKIP=1,ROWS=50000)
LOAD DATA
INFILE 'hr_test.txt' "STR X'0d0a'"
INTO TABLE TEST
FIELDS TERMINATED BY X'7c' TRAILING NULLCOLS
(
NUM_COL CHAR ,
CHAR_COL CHAR(10) ,
VAR_COL CHAR(10) ,
DATE_COL DATE "YYYY-MM-DD HH24:MI:SS" ,
LOBF_00005 FILLER CHAR(32),
BLOB_COL LOBFILE(LOBF_00005) TERMINATED BY EOF ,
LOBF_00006 FILLER CHAR(32),
CLOB_COL LOBFILE(LOBF_00006) TERMINATED BY EOF ,
RAW_COL CHAR
)
当然我给的参数肯定不是最好的, 请你试了后告诉我.
留言 (3)
需要将SKIP=1去掉, 有LOB时将DIRECT=TRUE去掉.
Posted by anysql | Nov 20, 2006 11:17 AM
这样的话,就是对应的BLOb字段装载还是NULL?并没有装载进去BLOB字段的内容?
如果是这样的话,为啥在sqlldr脚本写对应的BLOB字段呢?
sqlldr也是等于执行insert语句而已!
可以忽略对应的BLOB字段而直接装载其他的字段。
Posted by 2 | Nov 21, 2006 11:32 AM
CLOB字段当然不会是NULL了, 将文件的内容插入了啊.
Posted by anysql | Nov 21, 2006 11:41 AM