次のクエリを使用していくつかのデータをフェッチしています
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:有効な月ではありません
CASEbolckの日付を次のように置き換えると問題が解決しました
(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開発者でも同じ例外が発生するはずです。
問題はここで終了しません。日食からプログラムをデバッグしているときに、NVLブロックでto_date()なしで同じクエリが完全に実行されていることを確認しました。チェックしたところ、JDKは1.5でしたが、JREは1.6でした。 JREを1.5に変更し、同じJavaプログラムをデバッグしたところ、デバッグ時に、NVLブロックにto_date()がない同じクエリに対して同じ例外が発生していることがわかりました。
今、私は完全に混乱しています。なぜJRE5とJRE6の間にこのような不一致があるのでしょうか。
誰かが私を助けることができますか?