0

JPA 1 を使用しており、次のステートメントを実行するネイティブ クエリがあります。

select NVL (max (x.some), 0) from (select count (1) as some, service from some_table Where trunc    (fh_report) = '09 / 01/2015 'group by service) x

エラーのマーキングは次のとおりです。

java.sql.SQLDataException: ORA-01843: 有効な月ではありません

ただし、ORACLE ide で文をコピーすると、これは完全に実行されます。テスト用と本番用の 2 つのデータベースがあり、本番ではこの間違いがマークされ、テストではマークされません。

私も知りたいのですが、何がいいですか?? 日付を文字列に含めてから、このようにjpaに渡しますか?

String sql = "select NVL (max (x.some), 0) from (select count (1) as some, service from some_table Where trunc    (fh_report) = '09 / 01/2015 'group by service) x ";

Query query = em.createNativeQuery(sql.toString());

または日付値をパラメーターとして渡しますか?

これがエラーの原因でしょうか?

どうもありがとう。

4

2 に答える 2

1

暗黙の日付変換は、クライアントとサーバーの両方の設定に依存する場合があります。多くの場合、同じコードはある環境では実行されますが、別の環境では実行されません。

1 つの解決策は、ISO 8601 形式の ANSI 日付リテラルを使用することです。

trunc(fh_report) = date '2015-09-01'

元のコードはアメリカの日付形式を使用していると思います。ISO 8601 の利点は、人やコンピューターが推測する必要がなく、明確であることです。

于 2015-01-13T03:03:54.270 に答える
0
trunc    (fh_report) = '09 / 01/2015 '

日付を TRUNC() する場合、ドキュメントで指定されているように、結果の値は「DD-MON-YYYY」になります。

= テキストを次のように変更したとします。

trunc    (fh_report) = '01-SEP-15'

それはうまくいくはずです。

ただし、IDE で動作すると言ったことに混乱しています。データベースまたはバージョンが異なる場合を除き、動作することは想像できません。

于 2015-01-13T02:07:32.207 に答える