Получение Oracle Cursor с помощью JDBC - PullRequest
0 голосов
/ 26 мая 2010

Я испытываю некоторые разочарования, пытаясь заставить простую процедуру извлечения курсора Oracle работать с JDBC.

Я продолжаю получать сообщение об ошибке «[Oracle] [ODBC] [Ora] ORA-06553: PLS-306: неверный номер или типы аргументов при вызове« GETNAME »», но я не могу понять, кто я поступаю неправильно.

Вот мой код на Java:

CallableStatement stmt = connection.prepareCall("call getName(?)");
stmt.registerOutParameter(1, OracleTypes.CURSOR);
stmt.execute();

stmt.close();
con.close();

Вот моя процедура в Oracle:

CREATE OR REPLACE PROCEDURE getName(cur out SYS_REFCURSOR)
IS
BEGIN
    OPEN cur FOR
        SELECT name FROM customer;
END;

Ошибка возникает на stmt.execute().

Заранее спасибо.

Кстати, я работаю с Oracle 10.2.0.

Ответы [ 2 ]

2 голосов
/ 26 мая 2010

Я попробовал по существу то же самое, и это сработало для меня. Единственное отличие заключалось в том, что используемая мной библиотека Oracle JDBC не имеет метода registerOutputParameter; Я использовал registerOutParameter вместо этого. Возможно, вы вызываете общий метод JDBC вместо специфичного для Oracle, который поддерживает типы Oracle.

Единственное другое объяснение, которое я могу придумать, это то, что ваш Java-код подключается к неверной схеме и обращается к другому getName объекту.

0 голосов
/ 26 мая 2010

Нет, это неправильно. Вы не должны возвращать необработанный курсор. Вы должны вызвать сохраненный процесс и выполнить итерацию ResultSet.

...