首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java调用oracle函数

从Java调用oracle函数
EN

Stack Overflow用户
提问于 2011-05-07 07:30:39
回答 1查看 3.7K关注 0票数 1

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

getEmployee中,我试图返回一个包含员工数据的游标。(表: employee (ID,Name,address)):

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

BEGIN 

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

  RETURN OUTPUT;

END;

但是,当我从Java Code调用这个函数时,它给出了ORA-24338: statement handle not executed错误。下面是我的远程函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION GETEMPLOYEE ( IN_ID IN VARCHAR2 ) 
RETURN TYPES.RECORD_CURSOR AS

  RESULT_CURSOR TYPES.RECORD_CURSOR;

BEGIN

   OPEN RESULT_CURSOR FOR 
     SELECT ID, NAME, ADDRESS  
       FROM EMPLOYEE 
      WHERE ID = IN_ID; 

  RETURN RESULT_CURSOR;

END GETEMPLOYEE;

下面是我的Java代码:

代码语言:javascript
复制
String fncall = "{call ? :=  schema.LocalGetEmployee(?)}";

CallableStatement stm = con.prepareCall(fncall);
stm.registerOutParameter(1, Types.CURSOR);
stm.setInt(2, 123);
stm.execute();

ResultSet rs = (ResultSet) stm.getObject(1);
while(rs.next()) {
  ......
}
EN

回答 1

Stack Overflow用户

发布于 2011-05-07 12:50:42

使用在远程数据库中创建的refcursor对我来说毫无意义。dblink引用将在远程实例上打开一个会话,创建游标,并在远程函数调用终止时立即消失。因此,本地实例上的ORA-24338错误- refcursor没有指向任何有效的内容。

即使您可以让远程会话保持打开状态,refcursor将指向什么?远程数据库上的一些内存区?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5918044

复制
相关文章

相似问题

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