myBatis调用存储过程返回两种类型的值--只返回一种的问题

这几天在写程序遇到了一个问题,我写了一个存储过程,这个存储过程在调用完成后,会返回两个值,一个执行状态(返回0或1,1代码成功),一个是返回使用或返还的金额。

但在调用执行后,始终只返回了一个执行状态值 ,并没有返回另一个金额的值 。搞的我头都大了。先所代码发上来;

传送参数及调用方法

Map<String, Object> map = new HashMap<String, Object>();

		map.put("userUuid", orderMaster.getUserUuid());
		map.put("total", discountTotal);
		map.put("returnTotal",0);
		map.put("i_result", 0);
		map.put("updateType", 0);
		orderMasterMapper.callReturnUserBirthdayTotal(map);

Mapper.xml中的代码如下:

<select id="callReturnUserBirthdayTotal" parameterType="Map" statementType="CALLABLE"  resultType="DECIMAL">
     { call p_return_user_birthday_total( 
 	  #{userUuid,jdbcType=VARCHAR,mode=IN},  
 	  #{total,jdbcType=DECIMAL,mode=IN},
      	  #{updateType,jdbcType=INTEGER,mode=IN}, 
 	  #{returnTotal,jdbcType=DECIMAL,mode=IN}, 
      	  #{i_result,jdbcType=INTEGER,mode=OUT}
     )}
 </select>


想要的返回值 i_result = 1; 成功了,原本传送的是0,现在是1

retrunTotal = 0; 失败,传过去是0,返回的还是0


纠结了半天,浪费了半天时间,最后才发现,是自己大意写错了代码导致的。

我原本是想把 returnTotal/i_result返回的,但只返回了i_result,注意,在这里,i_result的mode =OUT;而returnTotal 的mode=IN,问题就出在这里,

#{returnTotal,jdbcType=DECIMAL,mode=IN}, 
改为

#{returnTotal,jdbcType=DECIMAL,mode=OUT}, 
就可以了。


最后的代码为:

<select id="callReturnUserBirthdayTotal" parameterType="Map" statementType="CALLABLE"  resultType="DECIMAL">
     { call p_return_user_birthday_total( 
 	  #{userUuid,jdbcType=VARCHAR,mode=IN},  
 	  #{total,jdbcType=DECIMAL,mode=IN},
      	  #{updateType,jdbcType=INTEGER,mode=IN}, 
 	  #{returnTotal,jdbcType=DECIMAL,mode=OUT}, 
      	  #{i_result,jdbcType=INTEGER,mode=OUT}
     )}
 </select>

不细心导致 了这个问题的出现。这次就让我死死记住了、、好伤心、做个记录,看一次伤一次,直接再也不犯为止。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值