2014-12-23 47 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;結束; /' ' –