Новый для Oracle здесь. Мой опыт заключается в создании веб-приложений, которые отправляют запросы в базу данных и возвращают «набор результатов», например, в Java с помощью Spring и JdbcTemplate.
Например, вот пример кода с обычным SQL query, используя класс RowMapper
, чтобы превратить строки набора результатов в список Java:
public List<Widget> findAllWidgets() {
return jdbcTemplate.query("SELECT * FROM widgets", new WidgetRowMapper());
}
Теперь мне поручено написать запрос, который вызывает хранимый PL / SQL процедура. Эта процедура имеет два входных аргумента (которые я могу обработать) и два выходных аргумента (назовем их error_code
и error_message
). Я хочу отправить запрос в базу данных, которая (а) запустит процедуру с моими входами и (б) вернет два вывода. Я был бы одинаково рад иметь два выхода в виде «строки» или просто связать их с двумя Java переменными.
Вот что я пробовал, и это не выдает ошибку, но не получает выходные значения, либо. Java переменные errorCode
и errorMessage
остаются пустыми строками:
public Map<String,String> callMyProcedure() {
String errorCode="";
String errorMessage="";
jdbcTemplate.update("call myprocedure(?,?,?,?)","input1","input2",errorCode,errorMessage);
return Map.of("errorCode",errorCode,"errorMessage",errorMessage);
}
Вопрос заключается в следующем: Как я могу получить значения переменных "OUT" процедуры PL / SQL при вызове процедуры из Java с помощью JdbcTemplate?
РЕДАКТИРОВАТЬ: я принял ответ Алекса, который не использует JdbcTemplate, потому что, кажется, это лучший способ. Мой собственный ответ использует JdbcTemplate, но требует гораздо больше кода, поэтому, если вы ищете что-то, что конкретно отвечает на вопрос, это будет сделано.