从PL / SQL块返回值

时间:2014-12-23 10:42:11

标签: java oracle oracle11g mybatis

我需要从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);

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

1 个答案:

答案 0 :(得分:0)

我认为您无法从过程调用中返回值。它可以在像对象这样的对象中设置一个值,就像你的例子一样,但是,我认为如果你在同一个sql事务中执行一个查询后更新像这样:

SELECT sql%rowcount FROM DUAL;

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