批处理中出现错误: ORA-00913: 值过多.错误如下。

wonflay 2008-10-31 09:25:08
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)
...全文
2597 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonflay 2008-10-31
  • 打赏
  • 举报
回复
谢谢 结帐!
wonflay 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 AWUSOFT 的回复:]
sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");


这里的值过多就是有可能后边的查询记录不只一条,SQL就不知道应该读取哪条的数据,所以说过多了.它只需要一个值,而的却是返回多个值了
[/Quote]这是有可能的 我先看下
awusoft 2008-10-31
  • 打赏
  • 举报
回复
sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");


这里的值过多就是有可能后边的查询记录不只一条,SQL就不知道应该读取哪条的数据,所以说过多了.它只需要一个值,而的却是返回多个值了
wonflay 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 htziyou 的回复:]
一个sql 一个sql 的调试。 把其他sql 注释,看看是哪个sql 出的错。

看一下,插入的字段是否在 表中都有

sb.append("insert into tb_assetscard_history select tb_assetscard.*,sysdate from tb_assetscard where serialnum='"+serialnum+"';");
??

[/Quote]首先感谢你的回复。tb_assetscard.* 中的字段在 tb_assetscard_history 中都有,并且单独测试各个语句都能执行下去。
htziyou 2008-10-31
  • 打赏
  • 举报
回复
一个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 中都有??
wonflay 2008-10-31
  • 打赏
  • 举报
回复
keys 是从前面网页得到的一个数组
wonflay 2008-10-31
  • 打赏
  • 举报
回复
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;
}
  • 打赏
  • 举报
回复
把你的数据库操作文件贴出来看看什么原因造成批处理错误
Andy__Huang 2008-10-31
  • 打赏
  • 举报
回复
先测试你的sql语句没有问题,当然是在oracle里面pl/sql或toad测试了,
然后再用java连接数据测试
htziyou 2008-10-31
  • 打赏
  • 举报
回复
要看sql文,才能了解
htziyou 2008-10-31
  • 打赏
  • 举报
回复
要看sql文,才能了解

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧