ОБНОВЛЕНИЕ заявление: возвращение в refcursor
У меня есть запрос, который обновляет набор записей на основе определенных критериев. Я хочу получить столбцы результирующего набора этого оператора обновления и передать его в refcursor.
Я могу получить набор результатов с помощью RETURNING INTO
или в моем случае RETURNING myrows BULK COLLECT INTO ...
, Тем не менее, я не уверен, как заставить это работать с курсором - вы не можете сделать OPEN cursor FOR
с заявлением об обновлении.
Я предполагаю, что есть способ получить результаты RETURNING
Заявление в мой курсор. Как я могу это сделать?
1 ответ
Предполагая, что у вас есть определенная коллекция SQL (а не коллекция PL/SQL), вы сможете
RETURNING my_column
BULK COLLECT INTO my_collection;
а потом
OPEN p_rc
FOR SELECT *
FROM TABLE( my_collection );
Хотя это работает, есть некоторые оговорки. Если вы ожидаете UPDATE
Чтобы изменить большое количество строк (или вы ожидаете, что этот код будет выполняться во многих сеансах), хранение всех этих данных в коллекции может занять много места в PGA, что может негативно повлиять на производительность. Чтение набора данных в коллекцию только для того, чтобы отправить их обратно в движок SQL, также имеет тенденцию быть немного не элегантным. И, как я уже сказал, это предполагает, что ваша коллекция объявлена на уровне SQL, а не объявлена в PL/SQL.