我正在使用sqlldr在Oracle数据库中加载mysql数据...我的问题是我在MySQL中有一个Oracle不喜欢的DATE列...
以下是mysql中我的列的结构:
Extra Type Field Default Null Key
date dateToSend 0000-00-00 NO
这是我的ctl文件中的条目:
DATETOSEND "CASE :DATETOSEND WHEN '0000-00-00 00:00:00' THEN TO_DATE('1900-01-01', 'YYYY-MM-DD') ELSE TO_DATE(:DATETOSEND, 'YYYY-MM-DD HH24:MI:SS') END"
我用于“DATETOSEND
”的oracle列是DATE
来自mysql的日期字段的示例是:“2014-08-14
”
最后,我从sqlldr得到的错误是:
ORA-01861:literal与格式字符串
不匹配我知道这可能与我如何格式化“TO_DATE”有关,但我不确定我错过了什么......
更新:这使它运作起来:
DATETOSEND "to_date(SUBSTR(:DATETOSEND,1,10),'YYYY-MM-DD')"
答案 0 :(得分:0)
我怀疑问题是:
CASE :DATETOSEND WHEN '0000-00-00 00:00:00'
常量是Oracle中的无效日期。也许这会奏效:
CASE TO_CHAR(:DATETOSEND, 'YYYY-MM-DD HH24:MI:SS') WHEN '0000-00-00 00:00:00'
答案 1 :(得分:0)
这让它发挥作用:
DATETOSEND "to_date(SUBSTR(:DATETOSEND,1,10),'YYYY-MM-DD')"