ORACLE ORA-01000: 超出打开游标的最大数(解决及原因)
在for循环中调用数据库插表语句,容易造成ORA-01000: 超出打开游标的最大数的问题,主要原始是用CONNECTION 创建了 PREPAREDSTATEMENT ,用完了 PREPAREDSTATEMENT 后,没有关闭PREPAREDSTATEMENT,导致游标一直处于打开状态,因此在大数据访问量的情况下很容易出现数据库游标使用到最大,无法分配游标错误。
解决方式:
通过批量插入的方式:
oracle批量插入语句:
INSERT ALL
INTO TABLEA(field_1,field_2) VALUES (value_1,value_2)
INTO TABLEA(field_1,field_2) VALUES (value_3,value_4)
INTO TABLEA(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;
在mybatis中,需要将最后的一个;号去掉,并且mybatis批量插入oracle时需要显式指定为 useGeneratedKeys="false"
<insert id="addList" parameterType="java.util.List" useGeneratedKeys="false">INSERT ALL<foreach item="item" index="index" collection="list">INTO T_APPLAUD(ID,USER_ID,BUSINESS_TYPE,PRODUCT_ID,CREATE_TIME) VALUES(#{item.id, jdbcType=NUMERIC},#{item.userId, jdbcType=VARCHAR},#{item.businessType, jdbcType=VARCHAR},#{item.productId, jdbcType=VARCHAR},#{item.createdTime, jdbcType=NUMERIC} )</foreach>SELECT 1 FROM DUAL
</insert>
<insert id="insertMedadata" parameterType="String" useGeneratedKeys="false">${insertSql}
</insert>
另外一种方法是 insert into table(...) (select ... from dual) union all (select ... from dual)
<insert id="addList" parameterType="java.util.List" useGeneratedKeys="false">INSERT INTO T_APPLAUD(ID,USER_ID,BUSINESS_TYPE,PRODUCT_ID,CREATE_TIME)<foreach item="item" index="index" collection="list" separator="union all">(SELECT #{item.id},#{item.userId},#{item.businessType},#{item.productId},#{item.createdTime} FROM DUAL)</foreach>
</insert>
<insert id="insertBatch">INSERT INTO t_user(id, name, del_flag)VALUES<foreach collection ="list" item="user" separator =",">(#{user.id}, #{user.name}, #{user.delFlag})</foreach >
</insert>
ORACLE ORA-01000: 超出打开游标的最大数(解决及原因)相关推荐
- ORA-01000-超出打开游标的最大数(解决及原因)
GPS平台.网站建设.软件开发.系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/inde ...
- Java oracle 超出打开游标的最大数
Java代码在执行conn.createStatement和conn.prepareStatement时候实际上都是相当和在数据库中打开了个cursor 不要放在这两个方法不要放在循环中 java.s ...
- Java 技术篇 - 连接oracle数据库执行sql使用close()关闭createStatement()无效无法清除游标缓存问题解决,报“ORA-01000: 超出打开游标的最大数“错误解决方法
java.sql.SQLException: ORA-01000: 超出打开游标的最大数 问题在一个大数据量的嵌套循环下 close() 关闭 createStatement() 根本无效,即使把执行 ...
- ORA-01000: 超出打开游标的最大数
当使用JDBC操作数据时出现起出打开游标最大数的原因:一般出现在执行大量插入语句 时,没有关闭Statement. 解决方法:每次插入一条数据时或找执行一次批量提交时,记得 stmt = conn.c ...
- oracle ora 00279,ORA-01245、ORA-01547错误的解决
数据库rman restore database 之后,执行recover database的时候,报告ORA-01245错误,详细的错误信息如下: SQL> recover database ...
- Oracle ORA
ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 OR ...
- Oracle学习笔记 --- Oracle ORA错误解决方案
今天在Debug的时候报错了如下信息: 后来综合了网上的东西,总结如下: ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-000 ...
- oracle用户密码不被锁,Oracle用户密码过期和用户被锁解决方法【转】
[原因/触发因素] 确定是由于Oracle11g中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180天"所导致. [影响和风险] 影响 密码过期后, ...
- oracle简版如何打开,如何打开和关闭Oracle游标
如何打开和关闭Oracle游标 以Oracle显示游标为主,本文讲述了如何打开Oracle游标,以及相关的实际操作,下面和小编一起来看看吧! 打开Oracle游标 使用游标中的值之前应该首先dewen ...
- oracle 存储过程循环打开游标数据处理
2017-07-24 14:12:42 SQL内容: 1.一次性检索 100000 条数据. 2. 1000 条提交一次. 3.超过 100000 万条,重新打开游标,重新检索. pl/sql内容如下 ...
最新文章
- 成就更卓越、更有意义的人生
- Android Touch系统简介(二):实例详解onInterceptTouchEvent与onT
- Git本地与远程配对命令:两种 一种是在推送push时候配对 一种是新建分支checkout -b时候配对
- linux怎样测试tty,linux – 提示自定义:如何检测何时没有tty
- 力控批量添加变量_力控变量.ppt
- 背地砖上楼的机器人_德国发明铺地砖机器人,效率大幅度上升,节省千万!
- iterator adapter inserter
- 2020-11-05 转载 国内配置Electron开发环境的正确方式
- NDK配置文件Android.mk简介
- html个人中心源代码,HTML用户注册页面设置源码
- NB-iot的M5310A的学习
- 算法导论第三版 第30章习题答案
- Linux epoll模型详解及源码分析
- 基于SSM的汽车租赁管理系统
- [多媒体] 10大开源视频剪辑软件
- 计算机论文鉴定表指导教师评语,毕业论文指导老师评语|毕业论文鉴定表评语...
- win8页面 html,Win8 Metro风格界面设计HTML+CSS网页模板
- 怎么把蓝狐上的代码转为html,Ajax动态调用用户控件输出html
- 易福门电感式接近开关IGS200
- 计算机软件专业可以考哪些证书