下面是存儲過程從存儲過程的值:檢索使用本地SQL休眠
create or replace procedure
proc_emp_name(v_emp out emp.emp_name%TYPE, v_empid in emp.emp_id%TYPE)
is
begin
select emp_name into v_emp from emp where emp_id = v_empid;
dbms_output.put_line('Emp Name: ' || v_emp);
dbms_output.put_line('Procedure created successfully!!!');
end;
我想調用這個使用本地SQL,跟着這個鏈接,但不知道如何從程序檢索OUT
參數。
http://www.mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/
請讓我知道調用存儲過程並返回結果出來的最簡單的方法。
EDIT
如所建議的,檢查該文檔,我修改具有PROC第一參數作爲SYS_REFCURSOR
如下:
create or replace procedure
proc_empname_refcursor(v_empname OUT SYS_REFCURSOR, v_deptid in emp.emp_id%type)
is
begin
open v_empname for select * from dept where dept_id = v_deptid;
end;
我能夠使用NamedQuery
調用它,但我不由於其他限制,我們不想在映射文件中添加任何內容。我想下面的代碼調用進程內不使用NamedQuery
但它並沒有制定出:
Query query = session.createSQLQuery(
"CALL proc_empname_refcursor(?, :deptId)")
.addEntity(Dept.class)
.setParameter("deptId", new Integer(2));
List<Dept> departments = query.list();
for(int i=0; i<departments.size(); i++){
Dept department = (Dept)departments.get(i);
System.out.println("Dept Id: " + department.getDeptId());
System.out.println("Dept Name: " + department.getDeptName());
}
我得到異常:
org.hibernate.QueryException: Expected positional parameter count: 1, actual parameters: [] [CALL proc_empname_refcursor(?, :deptId)]
at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:319)
at org.hibernate.impl.SQLQueryImpl.verifyParameters(SQLQueryImpl.java:201)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:145)
at com.jdbc.HibernateStartup.main(HibernateStartup.java:70)
請讓我知道如何解決這個問題。
'session.connection()'已被棄用,有關如何替換這個問題的任何想法? – user182944
您可以讓我知道您使用的是何種Hibernate版本? – vincentks
我使用HIbernate v3.2.5 – user182944