ORA-00905:缺少关键字Hibernate Query Oracle

时间:2017-05-18 16:36:07

标签: java sql oracle hibernate ora-00905

我在表格中有n列。我希望选择条件好像column2中的值为null,然后根据column 1选择行,如果column2不为null,则根据column 2的值进行选择。我有一个很长的查询,在引入 CASE WHEN THEN 之前工作正常但我得到 ORA-00905 在我的查询中添加了案例。示例查询如下:

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 个答案:

答案 0 :(得分:1)

我认为你可以在不使用大小写的情况下使用替代语句..:

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