hibernate 调用oracle存储过程,[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法...

目录

一、前言

我们知道在plsql里可以通过下面方式执行存储过程,

begin P_ACCOUNT(202004270000) ; end;

--或者

call P_ACCOUNT(202004270000)

但是在代码里如何调用存储过程呢,我试了一些网上大家提供的方法,基本没用效果,包括在@Query后面加{call P_ACCOUNT(?,?)} 什么存储过程名称的,或者各种接口、实现类互相调用的,都是千篇一律,不知道哪家copy哪家的,都没有任何效果 。

或者这些方法对他们的项目可能有用,亦是我的姿势可能不对,但是总的来说,下面这个方法是我亲测可用的,而且实现起来相对更简单,十行代码都不到就能实现

二、调用存储过程Demo

//公众号灵儿的笔记:zygxsq

@Transactional

@Modifying

@Query

public void callProcedureSend(Long Id){

logger.info("调用存储过程P_ACCOUNT({})",new Object[]{Id});

StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("P_ACCOUNT");

storedProcedure.registerStoredProcedureParameter("A_ID", Long.class, ParameterMode.IN);

storedProcedure.registerStoredProcedureParameter("result", String.class, ParameterMode.OUT);

storedProcedure.setParameter("A_ID", Id);

boolean execute = storedProcedure.execute();

//博客原帖链接:https://blog.csdn.net/qq_27471405/article/details/105794591

//获取返回结果

String result = storedProcedure.getOutputParameterValue("result").toString();

}

防盗链防爬虫说明:搜索小小鱼儿小小林的博客,更多代码免费看

公众号灵儿的笔记:zygxsq

其他地方使用一律为盗取或者爬虫爬取

三、代码说明

P_ACCOUNT :就是在oracle中的存储过程名称

A_ID :就是入参,如果还有其他入参,就再写一行,

storedProcedure.registerStoredProcedureParameter("xxx参数", 参数类型, ParameterMode.IN);

我这里的入参id是一个number类型,所以这里用Long.class,如果是char类型,这里就用String.class

result:这里是自定义一个返回值的参数名称,如果存储过程有返回值返回,就加这行代码,如果没有的话,就不需要加这两行了

storedProcedure.registerStoredProcedureParameter("result", String.class, ParameterMode.OUT);

String result = storedProcedure.getOutputParameterValue("result").toString();

参考文章

感谢原作者的分享,让技术人能够更快的解决问题

本文分享 CSDN - 小小鱼儿小小林。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值