[英]Calling stored procedure using hibernate
I have a stored procedure defined in a package. 我在包中定义了一个存储过程。 The procedure accepts two parameters, one is a cursor: 该过程接受两个参数,一个是游标:
create or replace PACKAGE TESTPACKAGE IS
TYPE STATUSCURSOR IS REF CURSOR;
PROCEDURE TestProcedure(cId IN VARCHAR2,
StatusCursonVal IN OUT STATUSCURSOR);
END;
I am calling the procedure like this: 我正在这样调用程序:
String sql = "EXEC TESTPACKAGE.TestProcedure('testId')";
Query query = session.createSQLQuery(sql);
List list = query.list();
It is returning the following error: 它返回以下错误:
13:03:25,338 INFO [stdout] (default task-3) Hibernate: EXEC TESTPACKAGE .TestProcedure('testId') 13:03:25,338信息[stdout](默认任务3)休眠:EXEC TESTPACKAGE .TestProcedure('testId')
13:03:25,749 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) SQL Error: 900, SQLState: 42000 13:03:25,750 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) ORA-00900: invalid SQL statement 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语句
And the exception states "Could not extract resultSet". 并且异常状态为“无法提取resultSet”。
I have tried to execute the procedure in SQL Developer but it failed. 我试图在SQL Developer中执行该过程,但是失败了。 It seems the problem is I am executing the procedure with only one parameter but it also has an IN OUT parameter. 似乎问题是我仅使用一个参数来执行过程,但是它也具有IN OUT参数。
Please help how can I invoke this procedure. 请帮助我如何调用此过程。
Regards, Anirban. 问候,阿尼班。
As per hibernate documentation , correct way to call a stored procedure is - 根据休眠文档 ,调用存储过程的正确方法是-
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");
For executing Oracle stored procedure with cursor refer following example - 要使用游标执行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.