在调用存储过程的时候,不知道下面这段代码到底是哪里错了,总是报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
|