ORA-00907当从我的Java应用程序查询,但在SQL开发人员工作良好



我在准备好的语句中输入的查询是:

select * 
  from ( select seq, audit_ts, message_type
           from log2 
          where 1 = 1 
            and message_type in ('SOURCE', 'DEST') 
          order by seq desc ) 
 where ROWNUM <= ?

当我在应用程序中运行查询时,我得到:

java.sql。sqlsyntaxerroreexception: ORA-00907: missing right parenthesis

EDIT:下面是执行查询的java代码。我试图返回一组搜索结果,因此前缀包含SELECT语句,然后我可以有任意数量的后缀(在此摘录"AUDIT_LOG_SEARCH2"中),这些后缀是基于用户搜索的参数化WHERE子句:

StringBuffer query = new StringBuffer(300);
query.append(dbAdapter.getQuery("AUDIT_LOG_ENTRY_PREFIX"));
query.append(dbAdapter.getQuery("AUDIT_LOG_SEARCH2"));
// Insert parameters to complete the sql prepared statement 
PreparedStatement ps = _dbConn.prepareStatement(query.toString());
ResultSet rs = ps.executeQuery();

但查询运行良好,当我在SQL开发人员单独运行它。这个查询最初是为Postgres创建的,然后为Oracle更新。任何建议吗?

您需要在执行前将变量设置到preparedStatement中。

PreparedStatement ps = _dbConn.prepareStatement(query.toString());
ps.setInt(1, 10);

请张贴什么query.toString()给你,如果这不起作用。不是query,而是query.toString()

你在做什么?

// Insert parameters to complete the sql prepared statement

您是否正确使用ps.setString...或其他方法?还是你只是在替换问号?第二种可能会破坏您的查询。

基于@AlexPoole和@EdGibbs的评论,我决定添加更多的调试语句。事实证明,如果满足某些条件,该方法将在稍后的程序中以不同的sql"后缀"递归调用。后缀没有更新为包含语句的新ROWNUM所需的括号。因此,尽管ORA-00907可以抛出许多不同的格式问题,但实际上是一个右括号导致了我的问题:P

在创建sql查询的代码库中,前缀和后缀似乎是一种奇怪的模式。我正在考虑摆脱这种重构,这样查询就不必像那样构建了。任何建议? ?

所以对于任何人谁运行到这个Oracle错误,我建议记录sql语句,你正在生成和玩它在sql开发人员。如果它在这里工作,但在您的应用程序中不起作用,那么您的代码可能会做一些奇怪的事情:P

相关内容

  • 没有找到相关文章

最新更新