軒轅劍
2012-05-14 18:06
浏览 483
已采纳

oracle数据库cursor问题,超出打开最大cursor数

我创建了一个CallableStatement用来将给object表插入数据时,将生成的id返回。
[code="java"]String objectSQL = "begin insert into object(id,name,meta_type,status,create_date,create_user_id,last_update_date,province,city,street,community,grid,operator_id) values (null,?,?,?,?,?,?,?,?,?,?,?,?) returning id into ?;end;";[/code]
[code="java"]CallableStatement objectCallPS = conn.prepareCall(objectSQL);[/code]

插入的数据是通过另外一个查询做的
[code="java"]String qsql = "select "+allkey+" from " + reportTaskVO.getTableName() + " where update_flag=" + StatusUtil.NEW_DATA +" group by "+allkey;// and[/code]
[code="java"] ResultSet rs = st.executeQuery(qsql);[/code]

当我迭代这个ResultSet的时候,执行一部分后,就会抛出超出最大cursor数的异常。
[code="java"]objectCallPS.execute();[/code]

之前试过修改系统中open_cursors的值,但发现,数据再多点,还是会抛出这个异常。

各位高手,知道有什么好的解决方法吗?

异常信息如下:
[code="java"]java.sql.SQLException: ORA-01000: 超出打开游标的最大数
ORA-06512: 在 "SYSADMIN.OBJECT_TRIGGER", line 2
ORA-04088: 触发器 'SYSADMIN.OBJECT_TRIGGER' 执行过程中出错
ORA-06512: 在 line 1[/code]

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • zyn010101 2012-05-16 09:29
    已采纳

    10000条数据,分十页,每次1000条,每次往游标中放1000条,分十次循环。当然了,分多少页依赖于数据的总条数,计算这个应该不难吧?

    已采纳该答案
    打赏 评论
  • zyn010101 2012-05-14 19:01

    根据分页思想分批执行呗。

    打赏 评论

相关推荐 更多相似问题