目录
oracle执行存储过程
在PL/SQL工具中
1.在procedures目录下找到需要执行xxx存储过程,右键点击Test(如下图)
2.填写入参数,然后点击执行按钮,就可以了。
在命令窗口下: exec 存储过程(参数...)
EXEC procedure; --procedure是存储过程名
例: exec xxx_procedure('param1','param2','param3');
在程序中调用就用 call 存储过程名
hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}");//存储过程proc_stuInfo
mybatis调用存储过程
注解
在seriver层调用
@Override
public String getPoNo(String P_ROLE_NAME) {
Map<String,String> params=new HashMap<>();
params.put("P_ROLE_NAME ", P_ROLE_NAME);
fapiaoMapper.getPoNo(params);
String PoNo=params.get("P_RET");
return PoNo;
}
在dao层
@Select({ "call SP_GET_AUTO_NO(P_ROLE_NAME IN VARCHAR2,P_RET OUT VARCHAR2)" })
@Options(statementType= StatementType.CALLABLE)
void getPurchaseOrderNumber(Map<String,String> params);
注意点:
1、@options:statementType.CallAble 必须声明,告诉程序这是要执行存储过程,否则会报,main找不到
2、传一个参数是可以省略@Param("")的,但是这种情况下不能使用${},传两个参数以上时,必须要写@Param("")。
3、 存储过程的output参数,只能通过传入的map获取参数,使用map.XXX ;
输出参数 设置mode=OUT ,jdbcType与SQL中存储过程类型一致。
4、存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR
5、存储过程返回的结果集可直接用返回的map接收
xml
在seriver层调用
public class Test6 {
public static void testGetUserCount()
{
SqlSession sqlSession=MyBatisUtil.getSqlSession();
String statement="me.gacl.mapping.userMapper.getUserCount";
Map<String, Integer>parameterMap=new HashMap<String, Integer>();
parameterMap.put("sexid", 1);
parameterMap.put("usercount", 0);
sqlSession.selectOne(statement, parameterMap);
Integer result=parameterMap.get("usercount");
System.out.println(result);
sqlSession.close();
}
public static void main(String[] args) {
testGetUserCount();
}
}
dao层
void getUserCount(Map<String,Object> map)
xml
这里配置传入参数的映射parameterMap,statementType,在parameterMap中设置参数的方向。
<select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
CALL pro_get_usercountbyage(?,?)
</select>
<parameterMap type="java.util.Map" id="getUserCountMap">
<parameter property="age" mode="IN" jdbcType="INTEGER"/>
<parameter property="usercount" mode="OUT" jdbcType="INTEGER"/>
</parameterMap>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。