如何使用实体管理器在spring中调用oracle存储过程?
Posted
技术标签:
【中文标题】如何使用实体管理器在spring中调用oracle存储过程?【英文标题】:How to call oracle stored procedure in spring using entity manager? 【发布时间】:2020-09-19 20:13:05 【问题描述】: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
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:我试图复制您的问题,但我不能,尽管我使用的是 Postgres 而不是 Oracle。只是为了确定,你可以这样做吗:
StoredProcedureQuery storedProcedure = findByYearProcedure
.registerStoredProcedureParameter(1, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(2, Object.class,ParameterMode.REF_CURSOR);
.setParameter("Role", "admin");
谢谢
【讨论】:
也可能它需要是一个 void.class 而不是 Object.class 如logicbig.com/tutorials/java-ee-tutorial/jpa/…中所见以上是关于如何使用实体管理器在spring中调用oracle存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 和 Spring Data 访问实体管理器