Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中调用存储过程时出错_Java_Oracle_Hibernate_Stored Procedures - Fatal编程技术网

Java 在Hibernate中调用存储过程时出错

Java 在Hibernate中调用存储过程时出错,java,oracle,hibernate,stored-procedures,Java,Oracle,Hibernate,Stored Procedures,我遇到了一个问题,我试图使用Hibernate调用Oracle存储过程,如下面的代码片段所示 我的道类: Query q = session.createSQLQuery(" {call PKG.PROC_GET_DATA_SET(?, :parameter1, :parameter2) }") .setParameter(0, OracleTypes.CURSOR) .setParameter("parameter1", "fDate")

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

我的道类:

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
    .
    .
    .
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
程序:

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
    .
    .
    .
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
但是当我在DAO类中调用proc时,我得到一个错误,如下所示

错误:

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
    .
    .
    .
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,

您不能使用此代码调用使用hibernate的过程。看

建议的调用形式是标准SQL92:{?=call functionName()}或{?=调用 procedureName(}。不支持本机调用语法

对于Oracle,以下规则适用:

函数必须返回结果集 过程必须是返回结果集的输出。这由 在Oracle 9或10中使用SYS_REFCURSOR类型。在Oracle中,您需要 定义引用游标类型。有关详细信息,请参阅Oracle文献 信息

我建议试试这个:

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

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

setParameter
这是用于IN、OUT还是IN-OUT参数?为什么不命名所有参数?对于
OUT
您应该使用的唯一参数是ref游标,它是我的OUT参数,其余的都是带有值的IN参数。对不起,不知道。我能使用
reg>吗isterOutParameter
createSQLQuery
?@IBRE50411我不确定。我只知道,您得到的错误通常是由输入和输出参数之间的不匹配引起的。此外,按位置(顺序)和名称绑定参数也不是好的做法。