2017-05-18 6 views
1

テーブルにn個の列があります。カラム2の値がnullで、カラム1に基づいて行を選択し、カラム2がnullでない場合は、カラム2の値に基づいて選択基準を選択したいと思います。ケースWHENTHENしかし、私は大文字と小文字を追加したときに、ORA-00905を取得します。サンプルクエリは::ORA-00905:キーワードHibernate Query Oracleがありません

select * from table where table.testcolumn='some value' and (case when table.column2 is NULL then table.column1 = 'value' else table.column2 = 'value' end) 

例外として次のとおりです。

Caused by: java.sql.SQLSyntaxErrorException: ORA-00905: missing keyword 

    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91) 
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413) 
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1035) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:791) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:866) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1187) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3386) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3430) 
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491) 
    at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:128) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:674) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.doList(Loader.java:2213) 

答えて

1

私はあなたがたときに例の使用せずに代替ステートメントを使用することができると思う..:

select * from table 
where table.testcolumn='some value' 
and ( 
     (table.column2 is NULL and table.column1 = 'value') 
     or (table.column2 = 'value') 
    ) 
+0

それは働きました。ありがとうMaciej Kowalski – user123475

関連する問題