Вызов хранимой процедуры 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
,