数据文件aa.dat
13103104352<@#>13103107584<@#>Y<@#>20090618203357<@#>aaaa01<@#>7390 <@#>421402250
13103107788<@#>13103107792<@#>N<@#>20090621190919<@#>aaaa01<@#>7390 <@#>421403348
13103107814<@#>13103107829<@#>Y<@#>20090622102453<@#>aaaa01<@#>7390 <@#>421403491
13103107794<@#>13103107798<@#>N<@#>20090621205659<@#>aaaa01<@#>7390 <@#>421403361
13103107814<@#>13103107826<@#>Y<@#>20090622095912<@#>aaaa01<@#>7390 <@#>421403468
控制文件bb.ctl
OPTIONS(BINDSIZE=16777216,READSIZE=16777216,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE ‘aa.dat' "STR X'0a'"
APPEND INTO TABLE XYZ
FIELDS TERMINATED BY X'3c40233e' TRAILING NULLCOLS 
(
  MCONTRACT_NO CHAR(14),
  ACONTRACT_NO CHAR(14),
  VALID_FLAG CHAR(1),
  OP_TIME CHAR(14),
  OP_LOGINNO CHAR(6),
  OP_CODE CHAR(5),
  UPDATE_ACCEPT CHAR(14)
)OP_TIME 在数据库其实是date类型的,这控制文件时OCIULDR自动生成的。在一台Unix服务器上执行没问题,可以正常入库。
但是在另一台却不能正常入库,日志报Record 6136059: Rejected - Error on table XYZ, column OP_TIME.ORA-01861: literal does not match format string.
这是为什么啊?求助。

解决方案 »

  1.   

    修改客户端的 NLS_DATE_FORMAT命令行下执行
    linux:
    export NLS_DATE_FORMAT=YYYYMMDDHH24MISSwindows:
    set NLS_DATE_FORMAT=YYYYMMDDHH24MISS
      

  2.   

    OP_TIME 在数据库其实是date类型的,
    OP_TIME CHAR(14),这个格式写的有问题。
    改成to_timestamp(:OP_TIME,'yyyymmddhh24miss'),
    这样不论OP_TIME这一列是date类型或者是timestamp类型,都可以正确导入的。
    如果date类型的话,sqlldr导入的时候会自动截断然后导入。
      

  3.   

    也可以写成这样OP_TIME timestamp 'yyyymmddhh24miss',
    效果一样的