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

Kap*_*ana 4 sql oracle database-link ora-24338

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

getEmployee,我正在尝试返回带有员工数据的游标.(表:员工(ID,名称,地址)):

SELECT schema.getEmployee@dblink(id) 
  FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

如何使用列名(ID,名称,地址)获取结果集?

根据Contrad,我改变了我的本地功能;

FUNCTION LocalGetEmployee(ID in varchar2)
RETURN Schema.SomeRefCursor
AS  

OUTPUT Schema.SomeRefCursor;

BEGIN 

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

  RETURN OUTPUT;
END;  
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*rew 6

在远程站点获取Ref Cursor:

假设我们有两个涉及分布式事务的站点,Server1和Server2.在Server1过程上打开的Ref Cursor,无法在Server2站点获取.如果我们尝试获取此游标,则oracle会引发异常:

[ORA-02055: distributed update operation failed; rollback required
 ORA-24338: statement handle not executed]
Run Code Online (Sandbox Code Playgroud)

"我们不能在DBLink上使用Ref Cursor"

解决方案:

  1. 使用PL-SQL数据表.要么
  2. 从发起程序站点提供选择授权并使用DBLink而不是打开Cursor.

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