error is:批处理中出现错误: ORA-00913: 值过多 at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:415)
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:455)
at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:3961)
at weblogic.jdbc.wrapper.Statement_oracle_jdbc_driver_T4CStatement.executeBatch(Unknown Source)
at com.iyongxin.javabean.DBManager.executeUpdate(DBManager.java:369)
at com.iyongxin.javabean.Tb_assetsprocessManager.dispose(Tb_assetsprocessManager.java:437)
at com.iyongxin.adapter.Tb_assetsprocessAdapter.dispose(Tb_assetsprocessAdapter.java:346)
at jsp_servlet._fams.__tb_assetsprocess_dispose_general._jspService(__tb_assetsprocess_dispose_general.java:144)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)

解决方案 »

  1.   

    先测试你的sql语句没有问题,当然是在oracle里面pl/sql或toad测试了,
    然后再用java连接数据测试
      

  2.   

    public int dispose(Object[][] o) {
        if (o == null || o.length < 1)return 0;
        int r =0;
        
        String keys = "";
       
        String serialnum="",disposetype="",assetsindept="",assetsoutdept="",assetsprocessid="";
        for(int i=0;i<o[0].length;i++)
         keys+= "'" + o[0][i].toString()+"',";
        keys = keys.substring(0,keys.length()-1);
        String sql = "select * from tb_assetsprocess where ischecked='已反馈' and assetsprocessid in ("+keys+")";
        CachedRowSet crs = DBManager.executeQuery(sql);
        StringBuffer sb = new StringBuffer();
        try {
        
         //conn =DBManager.getConnection();
          while (crs.next()) {
            serialnum=crs.getString("serialnum");
            disposetype=crs.getString("disposetype");
            assetsindept=crs.getString("assetsindept");
            assetsoutdept=crs.getString("assetsoutdept");
            assetsprocessid=crs.getString("assetsprocessid");
       if(disposetype.equals("调拨转让")){
       //将卡片记录复制到历史表
       sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");
       //卡片记录里assetsadmindeptid改为调入单位
       sb.append("update tb_assetscard set getmode='调入', ASSETSWRIDATE=sysdate,assetsadmindept='"+DepartmentManager.getInstance().getByKey(assetsindept).getDepname()+"',assetsadmindeptid='"+assetsindept+"'where serialnum='"+serialnum+"';");
       }else{
       //将卡片记录复制到历史表
       sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");
       //删除卡片记录
       sb.append("delete from tb_assetscard where serialnum='"+serialnum+"';");
       }
       //审批状态设为已处置
           sb.append("update tb_assetsprocess set disposeperson=applyperson,disposedate=sysdate, ischecked='已核销' where assetsprocessid='"+assetsprocessid+"';");
           //sb = sb.substring(0,sb.length()-1);
           DBManager.executeUpdate(sb.toString().split(";")); 
           r++;
          }
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        finally {
          //DBManager.cleanup(conn,null,null);
        }
        return r;
      }
      

  3.   

    keys 是从前面网页得到的一个数组
      

  4.   

    一个sql 一个sql 的调试。 把其他sql 注释,看看是哪个sql 出的错。看一下,插入的字段是否在 表中都有sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");
    tb_assetscard.* 中的字段在 tb_assetscard_history 中都有??
      

  5.   

    首先感谢你的回复。tb_assetscard.* 中的字段在 tb_assetscard_history 中都有,并且单独测试各个语句都能执行下去。
      

  6.   

    sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");
    这里的值过多就是有可能后边的查询记录不只一条,SQL就不知道应该读取哪条的数据,所以说过多了.它只需要一个值,而的却是返回多个值了