2014-12-23 17 views
5

MyBatis'teki PL/SQL bloğundan bir değer döndürmem gerekiyor.PL/SQL bloğundan geri dönüş değeri

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

Bir değer döndürmek için gereken nedeni, ben etkilenen satır sayısını elde edebilmek istiyorum ki:

PL/SQL bloğu

budur. Bunun yerine bu var

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

:

ben böyle yapabileceğini biliyorum:

<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> 

Ama bu java eşleştiricisindeki böyle bir yöntemi olmalıdır demektir

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

Bu değeri bir harita olmadan döndürmenin bir yolu var mı?

cevap

0

Prosedür çağrısından bir değer döndüremiyorsunuz.

SELECT sql%rowcount FROM DUAL; 

Sen sayısını elde edebilirsiniz: It aynı sql işlem de böyle güncellemeleri sonra bir sorgu yürütmek ama eğer bence bir pojo veya örnekteki gibi bir harita gibi bir nesne bir değer ayarlamak mümkündür ResultSet gibi etkilenen satırlar.

+0

'sql% rowcount' yalnızca PL/SQL'de kullanılabilir, bu çalışmaz. –

+0

Soru, PL/SQL – maframaran

+0

hakkında, "SQL deyiminde bir PL/SQL bloğunda olsa bile" sql% rowcount "SQL deyiminde kullanılamaz." Örneğin, bu blok işe yaramaz: 'v_number numarasını belirtin; % sql satır öğesini SELECT DUAL; son;/' ' –