|
    
- 帖子
- 335
- 主题
- 16
- 精华
- 0
- 积分
- 2122
- 疯狂金币
- 1055
- 疯狂水晶
- 1
- 性别
- 男
- 在线时间
- 788 小时
 
|
10#
发表于 2010-5-25 16:14
| 只看该作者
汗,今天也在搞存储过程,用的是Spring + Hibernate 来调用Oracle中的存储过程
Oracle中的存储过程为:
create or replace procedure ProcDyDd(strFcorpcode in list_tz.fcorpcode%type, strSynf in cs_hz.synf%type) is
cursor c1(theFcorpcode cs_hz.fcorpcode%type,theSynf cs_hz.synf%type)
is
select Fcorpcode,Synf,dm,bh,xm,jsdw,dddx,dddx_Min,dddx_Max,bz,bz_1,bz_2,bz_3,bz_4,rjszdl,sb,dy,dy_1,dy_2,dy_3,dy_
…………
…………
return;
end ProcDyDd;
hbm配置文件片段:
<sql-query name="ProcDyDd" callable="true">
{call ProcDyDd(?,?)}
</sql-query>
调用存储过程的方法:
- public List callProcedure(final String procNamed, final Object... args)
- {
- //通过一个HibernateCallback对象来执行查询
- List list = getHibernateTemplate()
- .executeFind(new HibernateCallback()
- {
- //实现HibernateCallback接口必须实现的方法
- public Object doInHibernate(Session session)
- throws HibernateException, SQLException
- {
- Query query = session.getNamedQuery(procNamed);
- for (int i = 0; i < args.length; i++)
- {
- query.setParameter(i, args);
- }
- return query.list();
- }
- });
- return list;
- }
复制代码
搞了一中午都不行,下面是错误提示:
后来查了下《轻量级JavaEE企业应用实战》P515 写到
对于Oracle有如下规则:
存储过程的第一个参数必须是OUT,它返回一个结果集。
难道没解决的办法?或者只能用JdbcTemplate来解决?
[ 本帖最后由 leeyohn 于 2010-5-26 12:59 编辑 ] |
|