ORA-00937: 不是单组分组函数

dropkai 2011-06-10

今天在java中拼接sql时犯了一个很低级的错误,sql语句拼接好以后,查询总是报ORA-00937: 不是单组分组函数,检查了好久都没没有找到错误的原因,在控制台打印的sql语句放到pl/SQL中执行也没错,但死活在junit测试的时候报ORA-00937的错误,忽然灵感来了,发现原来是我往dao中设置拼接好的sql语句不完整,group by子句和order子句都没有拼接到sql语句中。

代码如下: 灰色背景的语句应该在绿色背景语句下

this.getDAO();   log4j.info(LogUtil.cSqlLogString("数据库连接:",dao.getConnection().toString()));

   StringBuffer lsSQL = new StringBuffer();

List<Object>laParameter=newArrayList<Object>();

//开始时间

Stringbtimecode="";

//结束时间

Stringetimecode="";

if(!"".equals(timecode)&&null!=timecode){

if(timecode.indexOf(",")!=-1){

btimecode=timecode.split(",")[0];

etimecode=timecode.split(",")[1];

btimecode=ZztDateUtil.getWeekBegin(Integer.valueOf(btimecode.substring(0,4)),Integer.valueOf(btimecode.substring(4,6)));

etimecode=ZztDateUtil.getWeekBegin(Integer.valueOf(etimecode.substring(0,4)),Integer.valueOf(etimecode.substring(4,6)));

}else{

btimecode=ZztDateUtil.getWeekBegin(Integer.valueOf(timecode.substring(0,4)),Integer.valueOf(timecode.substring(4,2)));

}

}

lsSQL.append(getWwtpSQL());

//开始时间不为空时

if(!"".equals(btimecode)&&null!=btimecode){

laParameter.add(btimecode);

lsSQL.append("\nandbegintime>=to_date(?,'yyyy-MM-dd')");

}

//结束时间不为空时

if(!"".equals(etimecode)&&null!=etimecode){

laParameter.add(etimecode);

lsSQL.append("\nandbegintime<=to_date(?,'yyyy-MM-dd')");

}

dao.setSQL(lsSQL.toString(),BaseDAO.DAOSQL,true);

lsSQL.append("\ngroupbyregioncode,regionname");

lsSQL.append("\norderbyregioncode");

   

   int liIndex=1;

for(intliLoop=0;liLoop<laParameter.size();liLoop++){

dao.setParameterValue(liIndex++,laParameter.get(liLoop));

}

log4j.info(LogUtil.cSqlLogString("污水处理厂总量按直辖市汇总-"+btimecode+"至"+etimecode+":",lsSQL.toString()));

         lRetMsg = dao.executeQuery(SysConfig.COMMON_DHO);

相关推荐