java – 从PL / SQL块返回值

我需要从MyBatis中的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 mapper中有这样的方法:

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

我改为:

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

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

最佳答案
我认为你不能从过程调用中返回一个值.可以像对象一样在像pojo或map这样的对象中设置一个值,但是,我认为如果你在同一个sql事务中执行一个查询,就像这样更新:

SELECT sql%rowcount FROM DUAL;

您可以像ResultSet一样获取受影响的行数.

转载注明原文:java – 从PL / SQL块返回值 - 代码日志