Return 使用 Mybatis 的 Oracle 函数的值
Return value from Oracle function using Mybatis
我查看了有关此问题的许多 Whosebug 问题,但找不到任何有意义的问题。 最接近,但没有显示如何从函数中获取 return 值。
这是我的映射器调用:
public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments);
这是映射器 XML:
<select id="callMyFunction" parameterType="map" statementType="CALLABLE" resultType="java.lang.Long">
{ #{resultId,javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call MYSCHEMA.MYPACKAGE.my_function(
#{recordId,jdbcType=NUMERIC,mode=IN},
#{otherId,jdbcType=NUMERIC,mode=IN},
#{date,jdbcType=DATE,mode=IN},
#{comments,jdbcType=VARCHAR,mode=IN})}
</select>
调用有效,但 return 值 (resultId) 始终为空。
有人能发现问题吗?
如果你想return直接得到结果,那么SQL调用必须是:
SELECT MYSCHEMA.MYPACKAGE.my_function(...) FROM DUAL
如果您想继续以过程调用方式调用函数,这意味着结果是一个 OUT 参数(您将其声明为 OUT)。
最小的变化包括向映射器方法签名添加一个参数:
public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments, @Param("resultIdContainer") Map<String, Long> resultIdContainer);
在 XML 中:忘记 resultType,这是针对 select 的。和电话:
{ #{resultIdContainer.resultId, javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call ...
并不是说我在这里使用映射来包含 resutlId:需要间接访问:该函数会将参数 'result' 值写入您稍后可以阅读的地方(在您的映射器调用之后),您也可以使用class 与 resultId 属性.
我查看了有关此问题的许多 Whosebug 问题,但找不到任何有意义的问题。
这是我的映射器调用:
public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments);
这是映射器 XML:
<select id="callMyFunction" parameterType="map" statementType="CALLABLE" resultType="java.lang.Long">
{ #{resultId,javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call MYSCHEMA.MYPACKAGE.my_function(
#{recordId,jdbcType=NUMERIC,mode=IN},
#{otherId,jdbcType=NUMERIC,mode=IN},
#{date,jdbcType=DATE,mode=IN},
#{comments,jdbcType=VARCHAR,mode=IN})}
</select>
调用有效,但 return 值 (resultId) 始终为空。
有人能发现问题吗?
如果你想return直接得到结果,那么SQL调用必须是:
SELECT MYSCHEMA.MYPACKAGE.my_function(...) FROM DUAL
如果您想继续以过程调用方式调用函数,这意味着结果是一个 OUT 参数(您将其声明为 OUT)。
最小的变化包括向映射器方法签名添加一个参数:
public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments, @Param("resultIdContainer") Map<String, Long> resultIdContainer);
在 XML 中:忘记 resultType,这是针对 select 的。和电话:
{ #{resultIdContainer.resultId, javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT} = call ...
并不是说我在这里使用映射来包含 resutlId:需要间接访问:该函数会将参数 'result' 值写入您稍后可以阅读的地方(在您的映射器调用之后),您也可以使用class 与 resultId 属性.