EntityManager 调用oracle存储过程出错问题,高手救救命!

wangyinjia 2009-12-16 06:55:57
调用存储过程的方法的方法是 ,数据是oracle 11g

Query query = em.createNativeQuery("{call P_TEST()}");//注:P_TEST()是一个简单的存储过程已经测试过没问题
调用后生成的sql是
select
*
from
( {call P_TEST()} )
where
rownum <= ?
报错
18:30:55,453 WARN [JDBCExceptionReporter] SQL Error: 907, SQLState: 42000
18:30:55,453 ERROR [JDBCExceptionReporter] ORA-00907: 缺失右括号
...全文
540 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
scdnguaiguaide 2009-12-17
  • 打赏
  • 举报
回复
wangyinjia 好了没
BearKin 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 crazylaa 的回复:]
引用 5 楼 bearkin 的回复:
引用 4 楼 crazylaa 的回复:
是不是你创建的存储过程不符合EntityManager调用的规范噢。。。


升级升的真快。。

Hibernate调用存储过程是这样调用的么?


每天不停接分啊,就快,哈哈。

我还没搞清楼主这里的EntityManager到底是EJB里面的还是Hib里面的。。。。汗。。。。
[/Quote]


那把JDBC的答案发给他 应该可以了把?
crazylaa 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bearkin 的回复:]
引用 4 楼 crazylaa 的回复:
是不是你创建的存储过程不符合EntityManager调用的规范噢。。。



升级升的真快。。

Hibernate调用存储过程是这样调用的么?
[/Quote]

每天不停接分啊,就快,哈哈。

我还没搞清楼主这里的EntityManager到底是EJB里面的还是Hib里面的。。。。汗。。。。
BearKin 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crazylaa 的回复:]
是不是你创建的存储过程不符合EntityManager调用的规范噢。。。
[/Quote]


升级升的真快。。

Hibernate调用存储过程是这样调用的么?
crazylaa 2009-12-16
  • 打赏
  • 举报
回复
是不是你创建的存储过程不符合EntityManager调用的规范噢。。。
道光2008 2009-12-16
  • 打赏
  • 举报
回复
参考我的博客里面
wangyinjia 2009-12-16
  • 打赏
  • 举报
回复
老大就是这样调用有问题,哎~~
crazylaa 2009-12-16
  • 打赏
  • 举报
回复
EJB调用存储过程
要调用存储过程,我们可以通过EntityManager 对象的createNativeQuery()方法执行SQL 语句(注意:这里说的是SQL 语句,不是EJB3 QL), 调用存储过程的SQL 格式如下:
{call 存储过程名称(参数1, 参数2, … )}
在EJB3 中你可以调用的存储过程有两种
1.无返回值的存储过程。
2.返回值为ResultSet(以select 形式返回的值)的存储过程,EJB3 不能调用以OUT 参数返回值的存储过程

1.调用无返回值的存储过程
//调用无返回参数的存储过程
Query query = em.createNativeQuery("{call Procedure()}");
query.executeUpdate();

2.调用返回单值的存储过程
//调用返回单个值的存储过程
Query query = em.createNativeQuery("{call GetPersonName(?)}");
query.setParameter(1, new Integer(1));
String result = query.getSingleResult().toString();

3.调用返回表全部列的存储过程
在调用存储过程时,可以让EJB3 Persistence 运行环境将列值直接填充入一个Entity 的实例(本例填充进Person 对象),并将实例作为结果返回
//调用返回Person 全部列的存储过程
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
List result = query.getResultList();
存储过程GetPersonList:
CREATE PROCEDURE `GetPersonList`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from person;
END;

4.调用返回部分列的存储过程
创建存储过程:
CREATE PROCEDURE `GetPersonPartProperties`()
NOT DETERMINISTICSQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT personid, personname from person;
END;
//调用返回部分列的存储过程
Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
List result = query.getResultList();

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧