2015-08-27 4 views
1

Я хранимая функцию настройки следующим образом:Java - Вызов хранимой функции, которая возвращает курсор

CREATE OR REPLACE PACKAGE PACKAGENAME IS 
FUNCTION READ_FUNC(i_name IN VARCHAR2) 
    RETURN SYS_REFCURSOR; 
END PACKAGENAME; 
/
CREATE OR REPLACE PACKAGE BODY PACKAGENAME AS 
FUNCTION 
READ_FUNC(i_name IN VARCHAR2) 
RETURN SYS_REFCURSOR 
IS 
    cursor SYS_REFCURSOR; 
BEGIN 
    //do stuff 
    RETURN cursor; 
END READ_FUNC; 

Я пытаюсь вызвать его в Java следующим образом, но я получаю not a valid function or procedure name

try(CallableStatement stmt = conn.prepareCall("call PACKAGENAME.READ_FUNC(?)") 
{ 
    stmt.setString(1, name); 
    ResultSet result = stmt.executeQuery(); 
    // do stuff with result 
} 

Это определенно существует, потому что я могу desc PACKAGENAME, и у меня есть моя функция. Мне также удалось вызвать другие процедуры. Кто-нибудь знает, что я делаю неправильно?

ответ

3

Попробуйте следующее:

CallableStatement stmt = conn.prepareCall("{ ? = call PACKAGENAME.READ_FUNC(?) }"); 
stmt.registerOutParameter(1, OracleTypes.CURSOR); 
stmt.setString(2, name);