使用以下语句,导入成功:
1、建表时使用TIMESTAMP类型
2、编写CONTROL文件时,使用“TIME TIMESTAMP \"yyyymmddhh24missff6\" ”
转载一篇文章:
http://blog.itpub.net/post/5493/226131
客户要load一段数据,中间有含有毫秒的日期型数据。
建表语句含有如下语句:
...
CA_VALUE_DATE date,
CA_POST_DATE date,
...
开始试着用to_char(sysdate,'..')语句测试怎样才能取出毫秒数据,始终未能如愿。
后来经google发现,这样的语句可以拿到毫秒级别数据:
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff') time1,
to_char(current_timestamp) time2 from dual;
原来ff可以用来取出毫秒级别数据,于是修改control file如下:
LOAD DATA
APPEND INTO TABLE EP_CURRENT_CA_MOVEMENT
FIELDS TERMINATED BY X'09'
(
CA_CCY_CODE,
CA_AC_NUM,
CA_CIF_NUM,
CA_TRAN_REFNO,
CA_VALUE_DATE date "Mon DD YYYY HH12:MI:SS:ff3PM",
CA_POST_DATE date "Mon DD YYYY HH12:MI:SS:ff3PM",
CA_TRAN_AMT,
CA_RUN_BAL,
CA_TRAN_DESC,
CA_PRT_SEQ_NO,
CA_TRAN_CODE,
CA_TRAN_SOURCE,
CA_TRAN_IND,
CA_CS_FREQ,
CA_DATE_FROM date "Mon DD YYYY HH12:MI:SS:ff3PM",
CA_DATE_TO date "Mon DD YYYY HH12:MI:SS:ff3PM",
BOOKING_CENTER CONSTANT "SG"
)
涛声依旧,依然load不进去。
想起sysdate中也是取不出毫秒,想来应该是日期型数据没有存储毫秒的地方,修改建表语句:
...
CA_VALUE_DATE timestamp,
CA_POST_DATE timestamp,
...
再试,终于成功!!心情大畅。
附sqlldr启动语法如下:
sqlldr userid=username/password@instance control=c:table_name.ctl data=c:abc log=c:ep.log
**********************************************************************************
按照以上做法,没有成功。