如何在Spring中使用实体管理器调用oracle存储过程?

问题描述 投票:1回答:1
create or replace PROCEDURE TEST  
(
Role IN VARCHAR2, 
     OUTPUT 
 OUT SYS_REFCURSOR
)
AS
BEGIN
 OPEN OUTPUT FOR   
Select PC.PRODUCT_NAME,P.PARTNER_NAME
............
.............
  WHERE PC.ROLE_NAME='POS_LEAD';
END TEST;

在Spring中使用以下代码调用上述存储过程

StoredProcedureQuery findByYearProcedure = entityManager.createStoredProcedureQuery("TEST");

StoredProcedureQuery storedProcedure = findByYearProcedure
            .registerStoredProcedureParameter("Role", String.class, ParameterMode.IN)
            .registerStoredProcedureParameter("SYS_REFCURSOR", Object.class,ParameterMode.REF_CURSOR);
            .setParameter("Role", "admin");

System.out.println(storedProcedure.getResultList());

但我得到一个错误。

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'TEST'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

有谁能帮助我吗?

java spring stored-procedures oracle11g procedure
1个回答
0
投票

我试图重复你的问题,但我不能,虽然我使用Postgres而不是Oracle。 为了确定,你能不能用这个代替。

StoredProcedureQuery storedProcedure = findByYearProcedure
            .registerStoredProcedureParameter(1, String.class, ParameterMode.IN)
            .registerStoredProcedureParameter(2, Object.class,ParameterMode.REF_CURSOR);
            .setParameter("Role", "admin");

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.