当前位置: 首页 > 知识库问答 >
问题:

从Hibernate调用OUT参数的Oracle存储过程

黄高爽
2023-03-14

我通过Hibernate调用了一个带有OUT参数的存储过程,得到了以下错误:

17:30:52,646 ERROR [STDERR] Caused by: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_ACTIVITY_RECORDS'
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_ACTIVITY_RECORDS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我的存储过程:

  create or replace 
    PACKAGE BODY  "TEST_NESTEDTAB_PKG" AS

      PROCEDURE GET_ACTIVITY_RECORDS( TEMP_RESULT OUT ACT_LOG_TYPE, USERNAME IN ACTIVITY_LOG.USER_NAME%TYPE) AS
      BEGIN
        SELECT * BULK COLLECT INTO TEMP_RESULT
        FROM ACTIVITY_LOG
        WHERE USER_NAME  = USERNAME;
      END GET_ACTIVITY_RECORDS;

    END TEST_NESTEDTAB_PKG;

Hibernate映射:

 <sql-query name="getactivityLog" callable="true">
    <return class="com.test.ps.domain.SPActiveLog">
        <return-property name="activityId" column="ACTIVITY_ID" />
        <return-property name="username" column="USER_NAME" />
        <return-property name="activityDate" column="ACTIVITY_DATE" />
        <return-property name="activity" column="ACTIVITY" />
        <return-property name="userId" column="USERID" />
        <return-property name="action" column="ACTION" />
        <return-property name="userRole" column="USER_ROLE" />
        <return-property name="description" column="DESCRIPTION" />
        <return-property name="category" column="CATEGORY" />
        <return-property name="result" column="RESULT" />
    </return>
    { call TEST_NESTEDTAB_PKG.GET_ACTIVITY_RECORDS(?,:USERNAME) }
</sql-query>

我按如下方式调用了存储过程:

    Query qry = getSession().getNamedQuery("getactivityLog");       
    qry.setParameter("USERNAME", "FACTORY TOPTAR TOTAIN");
    Object result = qry.list();

有人能解释一下这段代码有什么问题吗?

共有1个答案

法浩壤
2023-03-14

试试这个:

{ ? = call TEST_NESTEDTAB_PKG.GET_ACTIVITY_RECORDS(:USERNAME) }

文档:https://docs.jboss.org/hibernate/stable/core.old/referen/en/html/querysql-namedqueries.html

16.2.2.使用存储过程进行查询

CREATE OR REPLACE FUNCTION selectAllEmployments
    RETURN SYS_REFCURSOR
AS
    st_cursor SYS_REFCURSOR;
BEGIN
    OPEN st_cursor FOR
 SELECT EMPLOYEE, EMPLOYER,
 STARTDATE, ENDDATE,
 REGIONCODE, EID, VALUE, CURRENCY
 FROM EMPLOYMENT;
      RETURN  st_cursor;
 END;
<sql-query name="selectAllEmployees_SP" callable="true">
    <return alias="emp" class="Employment">
        <return-property name="employee" column="EMPLOYEE"/>
        <return-property name="employer" column="EMPLOYER"/>
        <return-property name="startDate" column="STARTDATE"/>
        <return-property name="endDate" column="ENDDATE"/>
        <return-property name="regionCode" column="REGIONCODE"/>
        <return-property name="id" column="EID"/>
        <return-property name="salary">
            <return-column name="VALUE"/>
            <return-column name="CURRENCY"/>
        </return-property>
    </return>
    { ? = call selectAllEmployments() }
</sql-query>
 类似资料:
  • 问题内容: 我已经使用PDO一段时间了,并且正在重构一个项目,以便它使用存储的proc而不是内联SQL。我收到一个我无法解释的错误。我正在使用PHP版本5.3.5和MySQL版本5.0.7。 我只是想获得一个带有输出的基本存储过程。这是存储的过程: 这是我用来调用proc的代码,$ db是PDO的一个实例: 简单吧?但是,它导致以下错误: 如果我直接这样调用proc: 它按预期工作,这使我相信PH

  • 问题内容: 我在SQL Server 2008 R2中有一个Oracle链接服务器。我需要执行Oracle存储过程(在第一个过程中使用输出参数,在第二个过程中使用输入参数): 我没有找到有关此问题的完整文档,只有带有无参数选择/非选择过程的简单示例,并且想知道如何调用这些过程,具有内部select的过程以及具有基本参数类型的多参数过程。 问题答案: 它应该像这样工作: 如果您有几个参数,则可能如下

  • 问题是,我想用mybatis/ibatis从java调用一个存储过程,这个过程有多个OUT参数,精确的7个,其中2个是Number,另外5个varchar,加上一个Number param 在上下文中有一个很大的限制,它没有模型,只有映射和列表,尽管如果需要,我们可以在调用过程时做一个例外。此外,解决方案必须用java完成,没有使用xml。 我有一个springboot应用程序,有一个rest服务

  • 我刚开始冬眠。我试图通过Hibernate调用oracle存储过程。我可以按照一些步骤通过Hibernate调用过程吗。 提前谢了。

  • 下面是我的Oracle存储过程, 我得到以下异常:hibernate:{CALL REPORT_HIBERNATE(?)}org.hibernate.exception.GenericJDBcException:无法执行查询...并且由:java.sql.sqlException:无效的列索引引起 Plz让我知道在Spring中我将如何使用Hibernate注释调用这个存储过程??

  • 在我的应用程序中,我想执行像SELECT*FROM tbl这样的查询,其中,@list中的col In(@list)可以有变量no of值。我正在使用MS SQL server数据库。当我搜索这个问题时,我找到了这个链接 http://www.sommarskog.se/arrays-in-sql-2008.html 此链接表示使用表值参数。因此,我使用Microsoft SQL Server M