mybatis mysql 存储过程_Mybatis调用数据库的存储过程和方法

上次的项目,要求我用java代码调用存储过程,折腾了好久。最后总算成功了。发片帖子纪念下,也给不懂存储过程的但是要调用的人一些提示

首先介绍下存储过程(本人是不会写的,但是目前能看懂)

create or replace procedure P_DAP_UNI_CUBE_INFO(V_CUBE_NAME IN VARCHAR2, --每个参数都有三部分 形参 in/out 类型, in是入参 ,out是返回的参数

V_TABLE_NAME IN VARCHAR2,

V_RETCODE OUT VARCHAR2,

V_RETINFO OUT VARCHAR2) is /看括号里面的参数

/*

************************************************************************* 后面不用看了我就粘了一半,反正不是我写的

*名 称 --%@NAME: P_DAP_UNI_CUBE_INFO

*功能描述 --%@COMMENT:

*执行周期 --%@PERIOD:

*参 数 --%@PARAM:ACCT_MONTH 帐期 YYMMDD

*参 数 --%@PARAM:V_RETCODE 过程执行结果代码(成功:SUCCESS/失败:FAIL/等待:WAIT),输出参数

*参 数 --%@PARAM:V_RETINFO 过程执行结果描述,输出参数

*创 建 人 --%@CREATOR:

*创建时间 --%@CREATED_TIME: 2018-3-12

*备 注 --%@REMARK:

*修改记录 --%@MODIFY: 修改人 YYYYMMDD 修改内容

*来 源 表 --%@FROM:

*目 标 表 --%@TO:

**************************************************************************

*/

V_PROV_ID VARCHAR2(3);

V_PKG VARCHAR2(40);

V_PROCNAME VARCHAR2(50);

V_ROWLINE NUMBER := 0; -- 记录目标表数据变化记录数

V_CUBE_ID VARCHAR2(100);

V_FILEDATE VARCHAR2(100);

上面就是数据库里已经存在的 存储过程了。有4个参数,前两个是输入,后两个是输出。假如直接从plsql调用,可以这么写

54bc2f0eefe441052c8971b76c945c8c.png

然后点旁边的输出就能看到结果;

你需要在plsql能调用成功的情况下才能使用代码调用

用mybatis调用时候的xml文件

{CALL jzyx_label.P_DAP_UNI_CUBE_INFO

(#{V_CUBE_NAME,mode=IN,jdbcType=VARCHAR},

#{V_TABLE_NAME,mode=IN,jdbcType=VARCHAR},

#{V_RETCODE,mode=OUT,jdbcType=VARCHAR},

#{V_RETINFO,mode=OUT,jdbcType=VARCHAR}

)}

大概就是select标签里面 call 存储过程名(参数1,参数2,参数3……)

虽然写了四个参数,但是其实你传过来的map只需要封装入参(就是mode=in)的就好了

mapper层

// 执行 存储过程

public int addCubeSqlMap(Map sql);

String cubeName = "第一个入参";

String factTableName = "第二个入参";

Map parm = new HashMap();

parm.put("V_CUBE_NAME",cubeName);

parm.put("V_TABLE_NAME",factTableName);

evapMapper.addCubeSqlMap(parm);

反正在map里面放入两个入参,传过去就能执行储存过程。

我当时不需要存储过程的返回值就没有取,如果要取存储过程的返回值直接用这个map去get就拿到了假设我要取这个过程的参数应该这么写

evapMapper.addCubeSqlMap(parm); //接着上面的代码

parm.get("V_RETCODE");        //直接get你要传入xml的map get mode=out 的那个参数名就拿到了存储过程给你返回的值……是不是很奇妙

parm.get(" V_RETINFO");

---------------------------------分隔线

当时遇到的一个错误,贴出来警告自己,为什么那么蠢

a6c36780eac8ea164f5d00adbac72d06.png

PLS-00904 就是告诉你你这个账户没有权限调用那个库的存储过程,不用怀疑!!赶紧登上plsql试试,肯定是这样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值