오라클 함수를 호출 할 때 항상 null을 반환 :CallableStatement.getResultSet() 나는 다음과 같은 코드를 실행하고
CallableStatement cs;
cs = conn.prepareCall("{ ? = call mypackage.myfunc()}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
System.out.println(cs.execute());
System.out.println(cs.getResultSet());
ResultSet rs = (ResultSet) cs.getObject(1);
System.out.println(rs);
다음과 같이 함수를 선언 : 문서에 따르면
CREATE OR REPLACE PACKAGE BODY myuser.mypackage AS
FUNCTION myfunc
return sys_refcursor
is
a_cursor sys_refcursor;
begin
open a_cursor for select * from mytable;
return a_cursor;
end myfunc;
end mypackage;
/
, 경우 결과가 있으면 cs.execute()는 true를 반환하고 cs.getResultSet()은 값을 갖습니다. 그러나 이것은 내가 얻은 결과입니다 :
false
null
[email protected]
Oracle Express 11.2.0 및 최신 드라이버를 사용하고 있습니다.
어떤 힌트/설명/시도해도 대단히 환영합니다.
감사합니다.
안녕 루크, 답장을 보내 주셔서 감사합니다. 매개 변수가 이미 바인딩되어 있고 cs.getObject (1)을 수행 할 수 있기 때문에 getResultSet() 호출이 필요 없다는 것을 알고 있습니다. 그러나 getResultSet()을 반환해야하는 디자인 문제가 있습니다. 커서 (나는이 코드를 제어 할 수 없다. 그 이유가있다. 위 코드는 내가 성취해야 할 것을 보여주기위한 것이다.) 그래서 함수가 실제로 getResultSet() 메소드를 통해 ResultSet을 리턴 할 방법이 없다면 (API는이 점에서 다소 혼란 스럽습니다) 나는 단지 그것을 버리 겠습니다. – Seba
API가 혼란 스럽다고 생각하지 않습니다. 함수는 참조 커서를 반환하지만 숫자 나 문자열을 반환하면 어떻게됩니까? 다른 참조 커서를 반환하는 OUT 매개 변수가 있으면 어떻게됩니까? JDBC는 SQL을 구문 분석하지 않으므로 바인드 매개 변수 1이 함수의 리턴 값임을 알 수 없습니다. 그리고 가능하다해도 JDBC가 참조 커서를 반환하는 함수에 대해 특별한 경우를 만들어야한다고 생각하지 않습니다. –
답변을 주셔서 감사합니다. – Seba