2014-12-23 48 views
5

我需要从MyBatis中的PL/SQL块返回一个值。从PL/SQL块返回值

的PL/SQL块是这样的:

DECLARE 
BEGIN 
    <foreach collection="params" item="param"> 
     UPDATE PRIORITIES 
     SET PRIORITY = #{param.priority} 
     WHERE ID = #{param.id}; 
    </foreach> 
END 

的原因,我需要返回一个值,就是我希望能够让受影响的行数。

我知道我能做到这一点是这样的:

<update id="updateAll" parameterType="map"> 
    { call 
    DECLARE 
    BEGIN 
     <foreach collection="params" item="param"> 
      UPDATE PRIORITIES 
      SET PRIORITY = #{param.priority} 
      WHERE ID = #{param.id}; 
     </foreach> 

     #{affected_rows, jdbcType=DECIMAL, mode=OUT} := sql%rowcount; 
    END 
    } 
</update> 

但这意味着我必须有这样的方法在Java映射:

public void updateAll(Map<String, String> parameters); 

我有这个:

public int updateAll(@Param("params") List<PriorityModel> model); 

有没有办法在没有地图的情况下返回该值?

回答

0

我认为你不能从过程调用中返回一个值。它可能像一个POJO或地图状的例子物的设定值,但是,我认为,如果你在同一个SQL事务这样的更新后,执行一个查询:

SELECT sql%rowcount FROM DUAL; 

你可以得到的数受影响的行像ResultSet。

+0

'sql%rowcount'只在PL/SQL中可用,这不起作用。 –

+0

问题是关于PL/SQL – maframaran

+0

我应该说,“sql%rowcount”在SQL语句中不可用,即使该SQL语句位于PL/SQL块中。“例如,这个块不起作用:'声明v_number号;开始SELECT sql%rowcount到v_number FROM DUAL;结束; /' ' –