在Hibernate中调用存储过程出错

时间:2015-06-17 13:44:55

标签: java oracle hibernate stored-procedures

我遇到了一个问题,我正在尝试使用Hibernate调用Oracle存储过程,如下面的代码段所示。

我的DAO课程:

Query q = session.createSQLQuery(" {call PKG.PROC_GET_DATA_SET(?, :parameter1, :parameter2) }")
            .setParameter(0, OracleTypes.CURSOR)
            .setParameter("parameter1", "fDate")
            .setParameter("parameter2", "tDate");
resultSet = q.list();

PROCEDURE:

CREATE OR REPLACE PACKAGE BODY schema.PKG
AS
PROCEDURE PROC_GET_DATA_SET(
   P_CURSOR    OUT    SYS_REFCURSOR,
   P_STRING1   IN     VARCHAR2,
   P_STRING2   IN     VARCHAR2
)
AS
BEGIN
 OPEN P_CURSOR FOR
    .
    .
    .

但是当我在DAO类中调用proc时,会出现如下错误。

错误:

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

苦苦寻找原因。有人可以在这里说些什么吗?

TIA,

1 个答案:

答案 0 :(得分:0)

您无法使用此代码使用hibernate调用过程。见docs

  

推荐的呼叫表格是标准的SQL92:{? =打电话   functionName()}或{? =打电话   procedureName(}。不支持本机调用语法。

     

对于Oracle,以下规则适用:

     

函数必须返回结果集。 a的第一个参数   procedure必须是返回结果集的OUT。这是通过   在Oracle 9或10中使用SYS_REFCURSOR类型。在Oracle中,您需要   定义REF CURSOR类型。请参阅Oracle文献   信息。

我建议尝试这个:

{? = call PKG.PROC_GET_DATA_SET(?, ?) }

如果这不起作用,请使用session.connection()