无法摆脱ORA-00907错误

时间:2012-06-04 17:42:56

标签: oracle ora-00907

我得到了错过的正确的paranthesis错误。如果我删除围绕iterator.next()语句的注释,它的工作正常。无法弄清楚什么是错的。我通过的数据中没有“(”)。

String ORACLE_SUM_QUERY = "select item_number, sum(system_quantity) from ITEMS " +
        "where sndate = ? and item_id in" +
        " (select item_id from ap.system_items where org_id = 4 " +
        " and segment1 in "; 
......
 while (iterator.hasNext()) {
//iterator.next();
String oracleQuery = String.format(ORACLE_SUM_QUERY + "(%s)) GROUP BY item_number", iterator.next());
        preparedStat = connection.prepareStatement(oracleQuery);
        preparedStat.setDate(1, getSnDate());

2 个答案:

答案 0 :(得分:1)

该错误似乎表明您在oracleQuery中构建的SQL语句的括号数不正确。在将SQL语句传递给prepareStatement调用之前将其打印出来以使调试更容易,这可能会有所帮助。

我的猜测是iterator.next()返回的字符串不是您所期望的。

答案 1 :(得分:1)

尝试将代码重写为

String ORACLE_SUM_QUERY = "select item_number, sum(system_quantity) from ITEMS " +
        "where sndate = ? and item_id in" +
        " (select item_id from ap.system_items where org_id = 4 " +
        " and segment1 in ("; 
......
 while (iterator.hasNext())
   {
   ORACLE_SUM_QUERY = ORACLE_SUM_QUERY + String.format("%s", iterator.next());

   if(iterator.hasNext())
     ORACLE_SUM_QUERY = ORACLE_SUM_QUERY + ",";
   }

ORACLE_SUM_QUERY = ORACLE_SUM_QUERY + ")) GROUP BY item_number";

preparedStat = connection.prepareStatement(ORACLE_SUM_QUERY);
preparedStat.setDate(1, getSnDate());

这可能无法完全达到我无法测试的程度,但它可能会让你更接近。

分享并享受。