【发布时间】:2015-09-02 19:13:01
【问题描述】:
我遇到了一个问题,我尝试使用 Hibernate 调用 Oracle 存储过程,如下面的 sn-ps 所示。
我的 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();
程序:
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,
【问题讨论】:
-
setParameter这是用于 IN、OUT 还是 IN OUT 参数?为什么不给所有的参数命名呢? -
对于
OUT,你应该使用registerOutParameter的唯一参数。 -
'?'用于 ref 游标,这是我的 OUT 参数,其余的都是用值给出的 IN 参数。
-
抱歉,不知道。我可以将
registerOutParameter与createSQLQuery一起使用吗? @ibre5041 -
我不确定。我只知道您遇到的错误通常是由 IN 和 OUT 参数之间的不匹配引起的。同时按位置(顺序)和名称绑定参数也不是好的做法。
标签: java oracle hibernate stored-procedures