1、直接在java程序中用jdbc connection的方式调用:
private ResultSet callProcedure(Connection conn, String proName, List<Object> values) throws Exception { CallableStatement cstmt = null; ResultSet rs = null; try { StringBuffer function = new StringBuffer("{call "+proName+"("); if (values != null && values.size() > 0) { for (int i=0; i<values.size(); i++) { function.append("?,"); } } function.append("?"); function.append(")}"); cstmt = conn.prepareCall(function.toString()); for (int i=0; i<values.size(); i++) { cstmt.setObject(i+1, values.get(i)); } cstmt.registerOutParameter(values.size()+1, oracle.jdbc.driver.OracleTypes.CURSOR); cstmt.execute(); rs = (ResultSet)cstmt.getObject(values.size()+1); return rs; }catch (Exception e) { e.printStackTrace(); throw e; }finally { try { cstmt.close(); }catch (Exception e) { e.printStackTrace(); throw e; } } }
2、java程序用ibatis调用存储过程:
ibatis配置:
<resultMap id="corp-map" class="com.procedure.domain.IbatisProDomain"> <result property="dm" column="DM" /> <result property="mc" column="MC" /> <result property="bz" column="BZ" /> ..... </resultMap> <parameterMap id="curMemuParameters" class="java.util.HashMap" > <parameter property="dm" javaType="java.lang.String" mode="IN"/> <parameter property="curMemuList" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="corp-map" /> </parameterMap> <procedure id="getProcedureExample" parameterMap="curMemuParameters"> {call P_EXAMPLE_PROCEDURE(?,?)} </procedure>
java程序:
List<IbatisProDomain> returnList = new ArrayList<IbatisProDomain>(); Map<String,Object> parameterMap = new HashMap<String,Object>(); if(domain != null){ parameterMap.put("dm","01"); parameterMap.put("curMemuList",null); sqlMapClientTemplate.queryForObjectByCurr("getProcedureExample","curMemuList",parameterMap); returnList = (List<IbatisProDomain>)parameterMap.get("curMemuList"); }