我遇到了一个问题,我正在尝试使用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,
答案 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()