2016-09-21 8 views
0

レコード数とデータをフェッチするSQL問合せを持つアプリケーションでは、hibernateを使用します。Hibernate SQL ORA-01858 select句のフィールド名に#を使用するとエラーが発生する

我々は、ファイルとsubstitueする文字列paramterizedメソッドを使用して、クエリがプロパティにあった以下に類似したクエリ(ここでSELECT句のフィールド名のいくつかはそれに「#」を持っていた)のような、

select count(*) as count 
from (
    select distinct field#1, field#2 
    from some_table1 st1, 
     some_table2 
    where st1.id = st2.id 
    and st1.updated_date between to_date(?, 'MM/DD/YYYY HH24:mi:ss) and to_date(?, 'MM/DD/YYYY HH24:mi:ss) 
) 

を使用バインド変数。

log4j2パラメータを使用してログ情報をコンソールに出力します。

<Logger name="org.hibernate" level="debug"/> 
    <Logger name="org.hibernate.SQL" level="debug"/> 
    <Logger name="org.hibernate.type.descriptor.sql" level="trace"/> 

私は、クエリに設定されているバインド値を印刷することができましたし、その中に任意の問題を見ていません。

Eclipseのエディタを使用してクエリを変更したときのアプリケーション内で、以下の例外がありました。

WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1858, SQLState: 22008 ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01858: a non-numeric character was found where a numeric was expected

ログにSQLクエリが印刷され、Toad for oracleで問題なく動作していました。

何らかの理由で、ファイルのソース(エンコードの内容がわからない)が問題なく動作していたことに気づきました。 私はBeyond Compareツールを使用してこれを自分の作業ディレクトリにマージしてアプリケーションがうまく動作します。

selectクエリのフィールド名に#を使用すると、エクリプスエンコーディングが問題を引き起こすかどうかはわかりません。

これはエンコードの問題のためですか?

- エンコーディングの問題ではないことを確認しました。

+0

を使用しよう(「MM/DD/YYYY HH24:?MI:SS)'。私たちは実際に 'to_date(?、 'MM/DD/YYYY HH24:mi:ss)' –

+0

を使ってアプリケーションで動的に問合せを作成しなければならないと仮定しています。 % 'を日付文字列に追加します。原因を特定するために2日間私を受けた..幸せなコーディング... – Tim

答えて

0

問題は、 `#`ではなく `

SELECT count(*) AS COUNT 
FROM 
    (SELECT DISTINCT field#1, 
        field#2 
    FROM some_table1 st1, 
     some_table2 
    WHERE st1.id = st2.id 
    AND st1.updated_date BETWEEN to_date(?, 'MM/DD/YYYY HH24:mi:ss') AND to_date(?, 'MM/DD/YYYY HH24:mi:ss')) 
関連する問題