ОБНОВЛЕНИЕ заявление: возвращение в 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.

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