Вызов хранимой процедуры Oracle в Java

Вот как я могу выполнить свою хранимую процедуру через SqlDeveloper

var p refcursor;
exec DMG.Getstudentids(12342343,:p);
print p;

Выход

P
-----------
STUDENT_ID
-----------
23432425
54353455

Теперь я пытаюсь выполнить хранимую процедуру таким же образом, но в Java. Вот мой код, и я что-то упускаю из-за параметров ввода / вывода или их типов данных.

Connection connection = DriverManager.getConnection(url, user, pass);
CallableStatement cs = connection.prepareCall("{call DMG.Getstudentids(?,?)}");
cs.setFloat(1, 12342343);
cs.registerOutParameter(2, Types.OTHER);
cs.execute();
List<Integer> result = (List<Integer>) cs.getArray(2);

Я получаю следующую ошибку

java.sql.SQLException: Invalid column type: 1111

Я думаю, что мне здесь не хватает чего-то фундаментального. Кто-нибудь видит, где я терплю неудачу? Благодарю.

1 ответ

Решение

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

Connection connection = DriverManager.getConnection(url, user, pass);
CallableStatement cs = connection.prepareCall("{call DMG.Getstudentids(?,?)}");
cs.setFloat(1, 12342343);
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.executeQuery();
ResultSet resultSet=cs.getObject(1);
List<Integer> result = new ArrayList<Integer>();
while(resultSet.next()){
 result.add(resultSet.getInt(STUDENT_ID));
}

Note : Так как procedure возвращается refcursorВам необходимо зарегистрироваться OracleTypes.CURSOR в качестве выходного параметра.

Еще одна вещь, которую стоит отметить, это то, что вам нужно перехватить весь набор данных.(refcursor) в Result Setитерируйте и поместите извлеченное значение в List,

Другие вопросы по тегам