以前一直以为sqlldr不能装载大于4k大小的文本, 原来这个理解是错误的. 但是在免费的文本导出程序ociuldr中, 没有充分考虑long类型. 第一, 用于fetch的数组大小是固定的500, 第二默认的long类型导出长度是4000. 最主要的原因是ARRAY固定为500不是件好事, 如果我指定long的导出长度为1MB, 那不是得用掉500M的系统内存?

    在最新的改进中, ARRAY SIZE的默认值变为50, 最小值为5, 最大值为2000, LONG类型的默认导出长度为32K, 还有就是LONG类型的导出长度乘以ARRAY SIZE的值不能超过100MB, 如果超出, 则ARRAY SIZE的值变为100MB除以LONG导出长度后的值, 如果不足5, 则设为5. 命令行帮助中多了两行:

       long  = maximum long field size
       array = array fetch size

    在生成控制时, LONG类型也能自处理, 生成的字段定义如下所示:


– Generated by OCIULDR

OPTIONS(BINDSIZE=8388608,READSIZE=8388608,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE ‘uldrdata.txt’ “STR X’06′”
INTO TABLE t_views
FIELDS TERMINATED BY X’07′ TRAILING NULLCOLS
(
  OWNER CHAR(30),
  VIEW_NAME CHAR(30),
  TEXT CHAR(32768)
)

    其中TEXT是视图的定义, 我已经在本地试过了, 导入了10K大小的视图定义.