java—如何用@procedure注解MapSpringJPA中varchar2的类型表?

xqkwcwgp  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(378)

目前,我正在尝试使用oracle中创建的存储过程(sp),它来自spring数据,带有jpa和annotation@procedure。
这看起来很简单,但过程有一个表类型参数(因为它是一个数组),当我在存储库中执行该方法时,会收到以下错误消息:

Caused by: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'SP_NAME'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

sp\ U名称(存储过程名称)具有以下声明:

PROCEDURE SP_NAME(mv_name IN MVIEWS_ARRAYS) as ...... more code

正如您在声明sp中看到的,它引用了mviews\u arrays类型,即声明为类型,如下所示:

create or replace TYPE   MVIEWS_ARRAYS IS TABLE OF VARCHAR2 (1000);

当我尝试从oracle客户端使用sp时,使用以下代码,它可以正常工作:

DECLARE    
mv_name MVIEWS_ARRAYS := MVIEWS_ARRAYS ('1', 'Two', 'Something else');   
BEGIN     
    SP_NAME(mv_name);  
END;

但是,当我尝试从java调用sp时,下面的代码就像一个存储库的示例;

@Repository
public interface InterfaceRepositoryExample  extends JpaRepository<SomeEntity, Integer>{

    @Async
    @Procedure("SP_NAME")
    public void spName(String[] mvName);

}

我得到了参数类型中的错误(上面的错误)。
我已经搜索过了,但是运气不好,oracle中的表类型和java中的一些原语或 Package 器类型之间没有类型关系,而且,我发现了很多没有响应的post和一些用java创建动态对象的代码,但是我不知道这是否是我正在搜索的。
有人知道我怎样才能解决这个错误吗?。
当做。
编辑时间:
我试过用不同的方法来做,但是我不能使用sp。
1.-使用数组代替字符串[],(参考:https://docs.spring.io/spring-data/jdbc/old-docs/2.0.0.m1/reference/html/orcl.datatypes.html,6.2铭文)

@Repository
    public interface InterfaceRepositoryExample  extends JpaRepository<SomeEntity, Integer>{

        @Async
        @Procedure("SP_NAME")
        public void spName(Array mvName);

    }

从服务中,我正在将字符串[]转换为数组:

java.sql.Array sqlArray = dataSource.getConnection().unwrap(OracleConnection.class).createOracleArray("MVIEWS_ARRAYS ", data);

但我收到了错误信息:
org.springframework.dao.invaliddataaccessapiusageexception:类型不能为空;嵌套异常为java.lang.illegalargumentexception:类型不能为null
2.-可赎回声明:

public void useSP(Array array) throws SQLException {
    CallableStatement proc = null;
    String sql = "{ call SP_NAME(?) }";
    try{
      proc = dataSource.getConnection().unwrap(OracleConnection.class).prepareCall(sql);
      proc.setArray(1, array);
      proc.execute();
    }finally{
      proc.close();
    }
}

从服务中,我正在将字符串[]转换为数组:

java.sql.Array sqlArray = dataSource.getConnection().unwrap(OracleConnection.class).createOracleArray("MVIEWS_ARRAYS ", data);
useSP(sqlArray);

但我收到了错误信息:
java.sql.sqlexception:ora-06550:第1行第7列:pls-00306:调用“sp\u name”时参数的数目或类型错误ora-06550:第1行第7列:pl/sql:忽略语句

0tdrvxhp

0tdrvxhp1#

我认为您可以尝试使用jpa来执行语句。然后将您的param作为oracle.array传递作为引用:如何在java中Mapvarchar2(5)的类型表?

相关问题