这几天在写程序遇到了一个问题,我写了一个存储过程,这个存储过程在调用完成后,会返回两个值,一个执行状态(返回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>
不细心导致 了这个问题的出现。这次就让我死死记住了、、好伤心、做个记录,看一次伤一次,直接再也不犯为止。