2012-05-14 11:05:26,465 [com.database.DataBaseOperator]-[INFO] 查询语句为:select a.order_id,to_char(a.createtime,'yyyy-MM-dd') createtime,a.user_grade,b.order_id,b.shopping_number,b.unitprice,b.totalprice,(case b.issend when 1 then '已经发货'when 0 then '暂未发货'end),b.trade_price,b.trade_total from orderr a, order_info b where 1 = 1 and a.order_id = b.order_id  
2012-05-14 11:05:26,502 [com.database.DataBaseOperator]-[INFO] select a.order_id,to_char(a.createtime,'yyyy-MM-dd') createtime,a.user_grade,b.order_id,b.shopping_number,b.unitprice,b.totalprice,(case b.issend when 1 then '已经发货'when 0 then '暂未发货'end),b.trade_price,b.trade_total from orderr a, order_info b where 1 = 1 and a.order_id = b.order_id  /n共查询1条记录!
2012-05-14 11:05:26,503 [com.lb.nt.clientAPI.Operator.JsonUtil]-[INFO] 正在进行List转换成JSON操作...............
2012-05-14 11:05:26,561 [com.lb.nt.clientAPI.Operator.JsonUtil]-[INFO] 将List转换成JSON操作完成!
2012-05-14 11:05:26,601 [com.log.SystemLog]-[ERROR] java.sql.SQLException: ORA-00984: 列在此处不允许java.sql.SQLException: ORA-00984: 列在此处不允许 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:582)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1983)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1141)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2149)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2032)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2894)
at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:875)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
at com.log.SystemLog.insertLog(SystemLog.java:37)
at com.developer_order.OrderService.getOrderEmerge(OrderService.java:70)
at org.apache.jsp.order.developers_005forder_jsp._jspService(developers_005forder_jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

解决方案 »

  1.   

    代码贴一下
    2012-05-14 11:05:26,601 [com.log.SystemLog]-[ERROR] java.sql.SQLException: ORA-00984: 列在此处不允许
      

  2.   

    猜错误太郁闷了。
    先把 case 那里加个别名。
    然后贴出代码。
      

  3.   

    public static JSONArray getOrderEmerge(HttpServletRequest request ){
    JSONArray jsonArray = null;
    String developer_id = OperateSession.getSession(request, "developer_id").toString();       //获得商家ID;
    String developer_type = OperateSession.getSession(request, "developer_type").toString();   //用户类型        
    String  order_id = StringUtil.getRequestString(request, "a.order_id");                     //订单的编号
    String  goodsname = StringUtil.getRequestString(request, "goodsname");                     //商品名称
    String begintime = StringUtil.getRequestString(request, "begintime");                      //开始时间
    String endtime = StringUtil.getRequestString(request, "endtime");                          //结束时间
            
            StringBuffer sql = new StringBuffer ("select a.order_id,to_char(a.createtime,'yyyy-MM-dd') createtime,a.user_grade,b.goodsname,b.shopping_number,b.unitprice,b.totalprice,(case b.issend when 1 then '已经发货'when 0 then '暂未发货'end),b.trade_price,b.trade_total from orderr a, order_info b where 1 = 1 and a.order_id = b.order_id  " );        
            //条件查询开始        and b.developer_id = '"+developer_id+"'                                                                               
            if(order_id!="") {                                                                      //判断订单编号是否为空
              sql.append (" and order_id = "+ order_id);                                            //执行SQL语句将订单编号为条件
            }
            if(goodsname!=""){                                                                      //判断商品名称是否为空
              sql.append(" and goodsname = "+goodsname);                                            //执行SQL语句将商品名称为条件
            }
            if(begintime!=""||endtime!=""){                                                         //判断起始时间与结束时间是否为空
              sql.append(" and a.createtime between to_char('"+begintime+"','yyyy-MM-dd hh24:mi:ss') and to_char('"+endtime+"','yyyy-MM-dd hh24:mi:ss')");
            }                                                                                       //执行查询时间区间
            List<DynaBean> list = DataBaseOperator.queryList(sql.toString());
    jsonArray = JsonUtil.listDynaBeanToJson(list);
    return jsonArray;
      

  4.   

    看日志,这条语句已经正确执行了。而且 json 转换也完成了。
    自己根据日志向下找吧...另:sql语句拷贝到数据库IDE中执行,以确认sql语句是否正确无误。
      

  5.   

    今天在调试一个入库程序是将使用数组里的值,直接拼出sql,但是放在sqlplus 里执行时报
    ORA-00984: column not allowed here
    看了看values里的值,好像没有什么问题
    再仔细看发现大部分字段值都是数字,唯独有一个字段是 S001,这个字段是char(8)
    不会是这的问题吧,给它加了一个单引号 'S001'。
    再次执行好了。
    原来是没有办法转换了
    这里我还在考虑一个问题:oracle 数据库里的数据到底是以什么样的格式存储的?
    oerr ora 984
    00984, 00000, "column not allowed here"
    // *Cause:
    // *Action:
      

  6.   

    at com.log.SystemLog.insertLog(SystemLog.java:37)
    看看这个类的37行
      

  7.   

    打个断点 在数据库中执行以下 你的SQL 看有没有问题。调试调试。。