繁体   English   中英

使用休眠调用存储过程

[英]Calling stored procedure using hibernate

我在包中定义了一个存储过程。 该过程接受两个参数,一个是游标:

create or replace PACKAGE TESTPACKAGE IS
TYPE STATUSCURSOR IS REF CURSOR;
PROCEDURE TestProcedure(cId IN VARCHAR2,
StatusCursonVal IN OUT STATUSCURSOR);
END;

我正在这样调用程序:

String sql = "EXEC TESTPACKAGE.TestProcedure('testId')";
Query query = session.createSQLQuery(sql);
        List list = query.list();

它返回以下错误:

13:03:25,338信息[stdout](默认任务3)休眠:EXEC TESTPACKAGE .TestProcedure('testId')

13:03:25,749警告[org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认任务3)SQL错误:900,SQLState:42000 13:03:25,750错误[org.hibernate.engine.jdbc.spi。 SqlExceptionHelper](默认任务3)ORA-00900:无效的SQL语句

并且异常状态为“无法提取resultSet”。

我试图在SQL Developer中执行该过程,但是失败了。 似乎问题是我仅使用一个参数来执行过程,但是它也具有IN OUT参数。

请帮助我如何调用此过程。

问候,阿尼班。

根据休眠文档 ,调用存储过程的正确方法是-

StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "sp_count_phones");
query.registerStoredProcedureParameter( "personId", Long.class, ParameterMode.IN);
query.registerStoredProcedureParameter( "phoneCount", Long.class, ParameterMode.OUT);

query.setParameter("personId", 1L);

query.execute();
Long phoneCount = (Long) query.getOutputParameterValue("phoneCount");

要使用游标执行Oracle存储过程,请参考以下示例-

StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "sp_person_phones" );
query.registerStoredProcedureParameter( 1, Long.class, ParameterMode.IN );
query.registerStoredProcedureParameter( 2, Class.class, ParameterMode.REF_CURSOR );
query.setParameter( 1, 1L );

query.execute();
List<Object[]> postComments = query.getResultList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM