簡體   English   中英

從Hibernate調用帶有OUT參數的Oracle存儲過程

[英]Oracle stored procedure with OUT parameters calling from Hibernate

我通過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;

休眠映射:

 <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();

誰能解釋這段代碼有什么問題?

嘗試這個:

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

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

16.2.2。 使用存儲過程進行查詢

Hibernate 3通過存儲過程和函數引入了對查詢的支持。 以下大多數文檔對於兩者都是等效的 存儲過程/函數必須返回結果集作為第一個輸出參數,才能與Hibernate一起使用。 在Oracle 9和更高版本中,這樣的存儲函數的示例如下:

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;

要在Hibernate中使用此查詢,您需要通過命名查詢將其映射。

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

注意,存儲過程當前僅返回標量和實體。 並且不受支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM