首页 > 解决方案 > 我可以使用@Procedure 在 spring-jpa 中调用 Oracle 函数吗?

问题描述

我有这个 Oracle 功能

FUNCTION fn_get_vp_id_by_hexstring (mp_hexstring    VARCHAR2,
                                   mp_fp_id        NUMBER,
                                   mp_erf_user     VARCHAR2 DEFAULT USER)
                                   RETURN NUMBER;

我想使用spring-data-jpa@Procedure的注释来调用它。

所以我创建了这个存储库代码:

@Procedure(procedureName = "FN_GET_VP_ID_BY_HEXSTRING")
Integer getVpIdByHexString(
    @Param("mp_hexstring") String hexstring,
    @Param("mp_fp_id") Integer fp_id,
    @Param("mp_erf_user") String user);

这不起作用,因为 spring 假定FN_GET_VP_ID_BY_HEXSTRING是一个过程,这意味着它期望返回值是输出参数,而不是 PL/SQL 函数的返回值。所以很明显我收到了这个错误信息(注意OUT=>:3):

Caused by: Error : 6550, Position : 6, Sql = BEGIN FN_GET_VP_ID_BY_HEXSTRING(MP_HEXSTRING=>:0,MP_FP_ID=>:1,MP_ERF_USER=>:2,OUT=>:3); END;, OriginalSql = {call FN_GET_VP_ID_BY_HEXSTRING(?,?,?,?)}, Error Msg = ORA-06550: Zeile 1, Spalte 7:
PLS-00306: wrong number or types of arguments in call to 'FN_GET_VP_ID_BY_HEXSTRING'

有没有办法使用@Procedure,或其他注释来调用 Oracle 函数?

标签: javaspringspring-data-jpa

解决方案


推荐阅读