首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数据库链接调用oracle函数

使用数据库链接调用oracle函数
EN

Stack Overflow用户
提问于 2011-05-05 14:53:59
回答 2查看 27.6K关注 0票数 4

我在远程数据库中创建了一个名为getEmployee(id in varchar)的oracle函数,并试图使用数据库链接从本地数据库调用它。

getEmployee中,我试图返回一个带有employee数据的游标。(表: Employee (ID,Name,address)):

代码语言:javascript
复制
SELECT schema.getEmployee@dblink(id) 
  FROM DUAL;

如何获得列名(ID、名称、地址)的结果集?

根据Contrad的说法,我这样改变了我的本地功能;

代码语言:javascript
复制
FUNCTION LocalGetEmployee(ID in varchar2)
RETURN Schema.SomeRefCursor
AS  

OUTPUT Schema.SomeRefCursor;

BEGIN 

  OUTPUT := schema.getEmployee@dblink(ID);

  RETURN OUTPUT;
END;  

但是,当我从Java代码调用此函数时,会引发以下错误:

"ORA-24338:语句句柄未执行“

EN

回答 2

Stack Overflow用户

发布于 2011-10-17 06:26:59

在远程站点获取参考游标:

假设我们有两个涉及分布式事务的站点,Server1和Server2。在Server1过程中打开的引用游标不能在Server2站点获取。如果我们试图获取这个游标,oracle会引发一个异常:

代码语言:javascript
复制
[ORA-02055: distributed update operation failed; rollback required
 ORA-24338: statement handle not executed]

“我们不能在DBLink上使用参考光标”

解决办法:

  1. 使用PL-SQL数据表。或
  2. 从启动器站点提供select授予和使用select命令,而不是打开游标。

来源:Oracle中的分布式事务(通过Oracle DBLink)

票数 6
EN

Stack Overflow用户

发布于 2011-05-06 02:49:22

据我所知,您的问题并不是真正的数据库链接,而是如何从Java客户端调用返回游标的函数并从该游标检索数据。我认为在Java中实现这一目的的唯一方法是用一些“过程”代码包装函数调用。我面前没有甲骨文,所以这是一些猜测:

代码语言:javascript
复制
String fncall = "begin ? :=  schema.getEmployee@dblink(?) end";
CallableStatement stm = con.prepareCall(fncall);
stm.registerOutParameter(1, Types.CURSOR);
stm.setInt(2, 123);
stm.execute();
ResultSet rs = (ResultSet) stm.getObject(1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5899798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档