我正在使用以下查询获取一些数据
SELECT
t.value_date,t.settlement_date,
(CASE WHEN NVL( t.settlement_date, '01-01-9999')='01-01-9999'
THEN t.value_date
ELSE t.settlement_date
END) AS modified_value_date,
t.instrument_pk,
bct.base_ccy_pk,
i.contract_size,
lc.min_trading_unit AS min_trading_unit_lc,
bc.min_trading_unit AS min_trading_unit_bc
FROM transaction t,
bc_transaction bct,
instrument i,
instrument lc,
instrument bc
WHERE t.status = 'NORMAL'
AND t.fund_pk = 99436
AND t.instrument_pk = 235342
AND t.instrument_pk = i.instrument_pk
AND t.local_ccy_pk = lc.instrument_pk
AND bct.transaction_pk = t.transaction_pk
AND bct.base_ccy_pk = bc.instrument_pk
AND t.value_date >= to_date('20121123000000','yyyymmddhh24miss')
AND t.transaction_type = 'SECURITY_TRADE'
ORDER BY modified_value_date,
t.processing_order,
t.txn_reference_no;
问题是当我在 Oracle SQL Developer 中运行上述查询时,它给出了正确的结果。但是,当我尝试使用 PreparedStatement 从我的 java 程序运行查询时,它会产生一个异常,如java.sql.SQLException: ORA-01843: not a valid month
当我将 CASE bolck 中的日期替换为
(CASE WHEN NVL(t.settlement_date,to_date('99990101000000','yyyymmddhh24miss'))=to_date('99990101000000','yyyymmddhh24miss')
THEN t.value_date
ELSE t.settlement_date
END) AS modified_value_date
现在我的问题是
- 为什么会有这种差异?如果问题出在 to_date() 那么它应该在 SQL 开发人员中也给出相同的异常。
问题并没有在这里结束我看到当我再次从 Eclipse 调试我的程序时,相同的查询在 NVL 块中没有 to_date() 的情况下完美运行我检查并发现我的 JDK 是 1.5 但 JRE 是 1.6。然后我改变了我的JRE 到 1.5 并调试相同的 java 程序,发现它在调试时产生相同的异常,对于 NVL 块中没有 to_date() 的相同查询。
现在我完全搞砸了,为什么 JRE 5 和 JRE 6 之间存在这种差异?
谁能帮我?