| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Вернуть набор строк из курсора |
| Автор: Wanderer2019 3.9.2009, 15:22 | ||
| Гуру Oracle, подскажите куда копать... есть процедура:
как из нее вернуть набор строк, который содержится в курсоре fs. Новый Select к таблице с перекладываением в курсор не подходит, ибо могут вернуться уже другие данные. |
| Автор: cra6 3.9.2009, 15:39 |
| Добавь в цикл insert и просто в таблицу какую нибудь пихай по одному. |
| Автор: Zloxa 3.9.2009, 16:03 |
| Курсор не содержит данных. Из курсора в оракле фетчить можно только один раз. Ораклиные курсоры чтото вроде forward only в MS. Для того чтобы результат запроса накопить, его нужно кудато засунуть. Либо в табличку сбоку, как рекомендовал cra6, либо, если объем не будет болшим в pl/sql таблику. Можно в xml пихануть. |
| Автор: Wanderer2019 3.9.2009, 16:09 | ||
=( не могу понять, как же поступить тогда в моем случает - нужно заблокировать часть данных, изменить статус у всего набора и вернуть в программу. |
| Автор: cra6 3.9.2009, 16:22 |
| В принципе можеш через out параметр вернуть в прогу ссылку на курсор и уже оттуда (из проги) делать апдейт... |
| Автор: Wanderer2019 3.9.2009, 16:24 | ||
для описанной выше процедуры - как это сделать? |
| Автор: cra6 3.9.2009, 16:43 | ||
где то так.
Про блокировку как-то завтыкал. Коммит делаеш уже из проги если там нет автокомита. |
| Автор: Wanderer2019 3.9.2009, 16:46 |
| cra6, а какую роль в данном случае будет играть commit? я так понимаю когда набор закоммитется, то юлокировка отпадет? или я ошибаюсь...если же все таки отпадет, то такое решение оказывается не лучше чем обычный селект и далее беготня по всем записям. |
| Автор: DimW 3.9.2009, 16:59 | ||||
вы неучли тот факт что на время редактирования данные необходимо заблокировать, а вы подтверждаете транзакцию:
на мой взгляд лучше пихать данные в коллекцию, после всего вернуть коллекцию на клиентскую сторону. Добавлено через 2 минуты и 11 секунд 2 Wanderer2019, а вообще вы бы лучше ситуацию пояснили, быть может решение будет в корне другим. Добавлено через 3 минуты и 12 секунд нет, не ошибаетесь. |
| Автор: Zloxa 3.9.2009, 17:10 | ||
| Если объемы позволяют использовать коллекции. если нет, смотрим в сторону http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/schema.htm#sthref769.
PS. Обычно системы проектируют так, чтобы транзакции фиксировало приложение. Фиксировать транзакцию в процедуре, в подобном случае, как бы не самый гуд практис. |
| Автор: Wanderer2019 4.9.2009, 11:08 |
| Всем спасибо за помощь. Приблизительный набор записей составляет около 25 тысяч строк. Решение пришло внезапно - добавил дополнительное поле и в него пишу идентефикатор потока (с применением блокировки), далее каждый поток уже знает что его, а что нет. |