【问题标题】:Unable to get out of ORA-00907 error无法摆脱 ORA-00907 错误
【发布时间】:2012-06-04 17:42:55
【问题描述】:

我收到缺少右括号的错误。如果我删除 iterator.next() 语句周围的 cmets,它工作正常。无法弄清楚出了什么问题。我传递的数据中没有“(”。

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());

【问题讨论】:

  • while (iterator.hasNext()) {中的左大括号匹配的右大括号在哪里?

标签: oracle ora-00907


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    尝试将代码重写为

    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());
    

    这可能无法完全理解,因为我无法测试它,但它可能会让你更接近。

    分享和享受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 2013-05-12
      相关资源
      最近更新 更多