spring+ibatis 调用Oracle存储过程出错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring+ibatis 调用Oracle存储过程出错相关的知识,希望对你有一定的参考价值。
项目中调用存储过程,报错为无效的列类型,但存储过程没有错误,可以运行
不知是哪的问题,请各位帮忙!
sqlmap配置:
<parameterMap class="map" id="procedure">
<parameter property="in1" jdbcType="varchar2" javaType="java.lang.String" mode="IN" />
<parameter property="out1" jdbcType="varchar2" javaType="java.lang.String" mode="OUT" />
</parameterMap>
<procedure id="updateMFund" parameterMap="procedure">
call UPDATE_M_TEST(?,?)
</procedure>
方法:
public String updateMFundByProcedure(HashMap<String, String> map)
getSqlMapClientTemplate().queryForObject("LCP_W_FUND_NET_PERFORMANCE.updateMFund", map);
return map.get("out1");
map为传进来的参数:
HashMap<String, String> map = new HashMap<String, String>();
String result = "";
map.put("in1", "update");
map.put("out1", result);
请各位高手帮忙啊,急!
改成 jdbcType="VARCHAR" 再试试 参考技术A jdbcType要写成VARCHAR
====
<parameter property="NO" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="START" javaType="java.lang.Integer" jdbcType="INTEGER" mode="IN"/> 参考技术B String result = "";这个参数你试验下,如果不为空,看看是什么样
超出最大打开游标 - Oracle 11g | ibatis 2.3.4 |春天 3.0.3
【中文标题】超出最大打开游标 - Oracle 11g | ibatis 2.3.4 |春天 3.0.3【英文标题】:Max open cursors exceeded - Oracle 11g | ibatis 2.3.4 | spring 3.0.3 【发布时间】:2013-09-15 01:25:45 【问题描述】:我们最近从 Sybase 迁移到 Oracle 11g 数据库。我们的应用程序使用 spring 3.0.3 和 IBATIS 2.3.4 与数据库交互。 最近,我们开始面临 ORA-01000 Maximum open cursors exceeded 异常。 我们与我们的 DBA 进行了交谈,他确认对于每一行插入,我们都占用了一个不正确的游标。游标大小由 DBA 设置为 300。
您能否建议我们如何通过 ibatis 配置或 Java 代码来处理这个问题? 我们从未遇到过 Sybase 的这个问题。
我们的 DAO 类中的当前代码结构:
try
sqlMapClient.startTransaction();
sqlMapClient.startBatch();
for(...)
sqlMapClient.insert(<in table 1>);
sqlMapClient.insert(<in table 2>);
sqlMapClient.executeBatchDetailed();
sqlMapClient.commitTransaction();
catch(..)
finally
sqlMapClient.endTransaction();
注意:我们不能执行中间提交,因为操作需要全部或无。
【问题讨论】:
【参考方案1】:您可以使用以下语句来增加游标数量。只有 DBA 用户可以执行以下语句。每当您的 pl/sql 编码出现性能问题时,就会出现此问题。请尝试调整procedure / sql。
ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;
【讨论】:
感谢您的建议,但是我们的 DBA 认为,与其增加光标大小,不如通过 iBatis 配置设置或通过 java 代码正确处理。原因是我们为每个插入使用了一个游标,而不是每批插入,这不是正确的方法。以上是关于spring+ibatis 调用Oracle存储过程出错的主要内容,如果未能解决你的问题,请参考以下文章
超出最大打开游标 - Oracle 11g | ibatis 2.3.4 |春天 3.0.3
IBatis.Net使用总结-- IBatis 调用存储过程