|
在调用存储过程的时候,不知道下面这段代码到底是哪里错了,总是报in或out参数索引丢失,但是我看着好像哪里都没错,想让各位大神帮忙看下,这段代码中是哪里除了问题,谢谢。 oracle存储过程: create or replace procedure pro_dept(dname in varchar2,cur_sys out sys_refcursor) is begin open cur_sys for select * from dept where dname like ""%||dname||%""; end; xml配置:
<resultMap type="Dept" id="getDept">
<id column="deptno" property="deptno"/>
<result column="dname" property="dname"/>
<result column="loc" property="loc"/>
</resultMap>
<!-- 调用存储过程返回结果集 -->
<select id="callProcedure1" parameterType="java.util.Map">
<![CDATA[
call getuserby(#{dname,mode=IN,jdbcType=VARCHAR},
#{depts,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=getDept})
]]>
</select>
调用:
Map<String, Object> param = new HashMap<String, Object>();
param.put("dname", "A");
procedureDao.callProcedure1(param);
List<Dept> depts = (ArrayList<Dept>)param.get("depts");
System.err.println(depts.size());
异常: ### Error querying database. Cause: java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 2 |
|
![]() |
你的输出参数在程序中没有传入!
//从游标返回结果集
public ResultSet getCursor(String dname)
{
try
{
......
stmt =(CallableStatement )conn.prepareCall("call pro_dept(?,?)");
stmt.setString(1,dname);
//注册游标对象类型
stmt.registerOutParameter(2,OracleTypes.CURSOR);
stmt.execute();
//返回结果集
ResultSet Rs=(ResultSet)stmt.getObject(2);
}
catch(Exception e)
{
}
return Rs;
}
|
![]() |
谢谢,刚刚我按照你说的将代码进行了下修改,但是还是报了in或out索引丢失:
Map<String, Object> param = new HashMap<String, Object>();
param.put("dname", "A");
//在这将一个游标类型传过去
param.put("depts", OracleTypes.CURSOR);
|
![]() |
procedureDao.callProcedure1
你这个方法里面是怎么弄的? |
![]() |
下面是接口和实现类
public interface IProcedureDao {
List<Dept> callProcedure1(Map<String,Object> param);
}
public class ProcedureDaoImpl implements IProcedureDao {
@Override
public List<Dept> callProcedure1(Map<String, Object> param) {
// TODO Auto-generated method stub
SqlSession session = MybatisUtil.currentSession();
IProcedureDao procedureDao = session.getMapper(IProcedureDao.class);
List<Dept> depts = procedureDao.callProcedure1(param);
MybatisUtil.closeSession();
return depts;
}
}
|
![]() 40分 |
我凌乱了………
|
![]() |
额,这个接口就是和Mapper文件形成映射,然后通过实现类调用。。。难道不是这样的吗? |
![]() |
谢谢你了,问题现在已经解决了。是我忘记加一个属性了,还有就是如果我传游标类型参数过去也是可行的。还是非常感谢你的。结贴了 statementType="CALLABLE" |
![]() |
楼主,求java部分,和xml部分,代码,,我按照你上面代码出不来。。。
|
![]() |
大神们,我已经提问问题了,,知道了来这里回答下。。。
http://bbs.csdn.net/topics/390866155?page=1#post-398024126 |
![]() |
楼主您的发件我这里没有收到额。。。能不能再发下,代码贴到我那个帖子里,或者文件的话发我qq邮箱吧,405099147@qq.com
|

