用SQLLDR来装载CLOB/BLOB列的控制文件例子

    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去掉.

这样的话,就是对应的BLOb字段装载还是NULL?并没有装载进去BLOB字段的内容?
如果是这样的话,为啥在sqlldr脚本写对应的BLOB字段呢?
sqlldr也是等于执行insert语句而已!
可以忽略对应的BLOB字段而直接装载其他的字段。

CLOB字段当然不会是NULL了, 将文件的内容插入了啊.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • He's the youngest in the family.
  • 他是一家中最小的.
  • He looks much younger than he is.
  • 他看起来比他实际上年轻得多.
  • I came here when I was 20.
  • 我二十岁来这儿.
  • I started school at the age of 6.
  • 我六岁开始上学.
  • My father is over 60 years old.
  • 我父亲已年过六十了.