Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Mybatis从Oracle函数返回值_Oracle_Mybatis - Fatal编程技术网

使用Mybatis从Oracle函数返回值

使用Mybatis从Oracle函数返回值,oracle,mybatis,Oracle,Mybatis,在这个问题上,我已经研究了许多StackOverflow问题,但找不到一个有意义的问题。最接近,但未显示如何从函数获取返回值 这是我的地图绘制者电话: public Long callMyFunction(@Param("recordId") Long recordId, @Param("otherId") Long otherId, @Param("date") Date date, @Param("comments") String comments); 以下是映射器XML: <se

在这个问题上,我已经研究了许多StackOverflow问题,但找不到一个有意义的问题。最接近,但未显示如何从函数获取返回值

这是我的地图绘制者电话:

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>
调用可以工作,但返回值resultId始终为null


有人能发现这个问题吗

如果要直接返回结果,则SQL调用必须是: 选择MYSCHEMA.MYPACKAGE.my_函数。。。来自双重

如果您想继续以过程调用样式调用函数,这意味着结果是一个您env声明的OUT参数。 最小的更改包括向映射器方法签名添加一个参数: 公共长线callMyFunction@ParamrecordId长recordId、@ParamotherId长otherId、@Paramdate日期、@Paramcomments字符串注释、@ParamResultId容器映射ResultId容器

在XML中:忘记resultType,这是用于选择的。电话: {{resultitcontainer.resultId,javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT}=call


我在这里并不是使用一个映射来包含resultId:需要一个间接寻址:函数将把参数“result”值写入某个地方,您可以在mapper调用后读取该值,您还可以使用一个带有resultId属性的类。

如果您想直接返回结果,那么SQL调用必须: 从DUAL中选择MYSCHEMA.MYPACKAGE.my_函数

如果您想继续以过程调用样式调用函数,这意味着结果是一个您env声明的OUT参数。 最小的更改包括向映射器方法签名添加一个参数: 公共长线callMyFunction@ParamrecordId长recordId、@ParamotherId长otherId、@Paramdate日期、@Paramcomments字符串注释、@ParamResultId容器映射ResultId容器

在XML:forget the resultType中,这是用于选择的。调用: {{resultitcontainer.resultId,javaType=java.lang.Long,jdbcType=NUMERIC,mode=OUT}=call


我在这里并不是使用一个映射来包含resultId:需要一个间接寻址:函数将把参数“result”值写入某个地方,您可以在映射器调用之后读取,您还可以使用一个带有resultId属性的类。

您是否使用recordId、javaType=long native type而不是long object wrapper进行过尝试?您是否尝试过使用我的方法对于recordId,javaType=long native type而不是long object wrapper?这正是我所需要的,非常感谢!在第一个变体ORA-00923:FROM关键字not found where expectedFixed中。它的工作原理与其他DBMS中的工作原理相同,而在Oracle中,我们确实必须从dual中选择任何东西。如果我的jdbcType是Cursor?应该调用什么{params.resultList,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=myResultMap,mode=OUT}=my_函数,其原理与过程相同:调用my_过程{params.resultList,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=myResultMap,mode=OUT}。请注意,params用于输入和输出。映射器结果类型为void。这正是我所需要的,非常感谢!在第一个变体ORA-00923中:在expectedFixed处找不到FROM关键字。它与其他DBMS中的工作方式相同,而在Oracle中,我们确实必须从Dual中选择任何内容。如果我的jdbcType是Cursor?应该调用什么{params.resultList,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=myResultMap,mode=OUT}=my_函数,其原理与过程相同:调用my_过程{params.resultList,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=myResultMap,mode=OUT}。请注意,参数用于输入和输出。映射器结果类型为void。