2011-05-06 6 views
1

원격 데이터베이스에 getEmployee(id in varchar)이라는 oracle 함수를 작성했으며 데이터베이스 링크를 사용하여 로컬 데이터베이스에서 호출하려고합니다. 나는 자바 코드에서이 함수를 호출 할 때,Java에서 oracle 함수 호출

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

BEGIN 

    OUTPUT := [email protected](ID) ;  

    RETURN OUTPUT; 

END; 

그러나 : (: 직원 (ID, 이름, 주소) 표). getEmployee에서

, 나는 직원 데이터로 커서를 반환하기 위해 노력하고있어 그것은 ORA-24338: statement handle not executed 오류를 제공합니다.

다음
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; 

내 자바 코드입니다 :

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()) { 
    ...... 
} 
+0

Java 코드를 게시 할 수 있습니까? –

+0

@ Trevor 내 원래 게시물에 자바 코드를 추가했습니다. –

+1

ORA 오류는 데이터베이스 문제가 있음을 의미합니다. 기능이 작동 할 때까지 Java를 살펴볼 가치가 없습니다. –

답변

1

그것은 원격 데이터베이스에서 만든 refcursor를 사용하는 나에게 아무 의미 여기 내 원격 기능입니다. dblink 참조는 원격 인스턴스에서 세션을 열고, 커서를 생성하며, 원격 함수 호출이 종료되면 즉시 사라집니다. 따라서 로컬 인스턴스에서 ORA-24338 오류가 발생했습니다. refcursor는 유효한 어떤 것도 가리 키지 않습니다.

원격 세션을 열어 둘 수 있더라도 refcursor가 가리키고있는 것은 무엇입니까? 원격 데이터베이스의 일부 메모리 영역?