据说sqlldr在导入固定长度的文本时, 速度可以提高很多, 也有网友想要这个功能, 想想可能我也需要这个功能, 于是就加了一下. 当指定用空格作为分隔符时, 就会变成以固定长度导出数据. 例如下面的导出命令.

ociuldr user=/ \
  query=”select owner,object_name from all_objects” \
  field=0×20 table=test

    修改了一下输出, 整个输出只有三行.

      0 rows exported at 2009-02-17 17:23:31
  17330 rows exported at 2009-02-17 17:23:32
        output file uldrdata.txt closed at 17330 rows.

    看一下输出文件中的记录, 现在已经变成等宽了. 不过这个长度只能是由程序自动设定的, 而不能人工设定各列的长度.

SYS                          ACCESS$
SYS                          AGGXMLIMP
SYS                          AGGXMLINPUTTYPE
SYS                          ALL_ALL_TABLES
SYS                          ALL_APPLY
SYS                          ALL_APPLY_CONFLICT_COLUMNS
SYS                          ALL_APPLY_DML_HANDLERS
SYS                          ALL_APPLY_ERROR
SYS                          ALL_APPLY_KEY_COLUMNS
SYS                          ALL_APPLY_PARAMETERS
SYS                          ALL_APPLY_PROGRESS

    检查一下自动生成的控制文件, 也已经反映出了固定长度导出.


– Generated by OCIULDR

OPTIONS(BINDSIZE=16777216,READSIZE=16777216,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE ‘uldrdata.txt’ “STR X’0a’”
INSERT INTO TABLE test
FIELDS TERMINATED BY X’20′ TRAILING NULLCOLS
(
  OWNER POSITION(1:30) CHAR(30),
  OBJECT_NAME POSITION(31:60) CHAR(30)
)

    还没有做足够的测试, 可能空值这儿有问题.