![]() |
|
Модераторы: LSD |
![]()
|
|
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
Гуру Oracle, подскажите куда копать...
есть процедура:
как из нее вернуть набор строк, который содержится в курсоре fs. Новый Select к таблице с перекладываением в курсор не подходит, ибо могут вернуться уже другие данные. Это сообщение отредактировал(а) Wanderer2019 - 3.9.2009, 15:25 |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
Добавь в цикл insert и просто в таблицу какую нибудь пихай по одному.
|
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
такой вариант не подходит по логике работы приложения. Добавление и удаление строк не всегда происходит корректно в связи с большой загруженностью БД - обновление по легче будет. Но вопрос состоит в возможности перечитать данные из CuRSOR в SYS_REFCURSOR или что либо подобное. как вернуть данные из курсор в программу? |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Курсор не содержит данных. Из курсора в оракле фетчить можно только один раз. Ораклиные курсоры чтото вроде forward only в MS.
Для того чтобы результат запроса накопить, его нужно кудато засунуть. Либо в табличку сбоку, как рекомендовал cra6, либо, если объем не будет болшим в pl/sql таблику. Можно в xml пихануть. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
=( не могу понять, как же поступить тогда в моем случает - нужно заблокировать часть данных, изменить статус у всего набора и вернуть в программу. |
|||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
В принципе можеш через out параметр вернуть в прогу ссылку на курсор и уже оттуда (из проги) делать апдейт...
|
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
||||
|
||||
| cra6 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.12.2007 Репутация: 2 Всего: 2 |
где то так.
Про блокировку как-то завтыкал. Коммит делаеш уже из проги если там нет автокомита. Это сообщение отредактировал(а) cra6 - 3.9.2009, 16:56 |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
cra6,
а какую роль в данном случае будет играть commit? я так понимаю когда набор закоммитется, то юлокировка отпадет? или я ошибаюсь...если же все таки отпадет, то такое решение оказывается не лучше чем обычный селект и далее беготня по всем записям. |
|||
|
||||
| DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
вы неучли тот факт что на время редактирования данные необходимо заблокировать, а вы подтверждаете транзакцию:
на мой взгляд лучше пихать данные в коллекцию, после всего вернуть коллекцию на клиентскую сторону. Добавлено через 2 минуты и 11 секунд 2 Wanderer2019, а вообще вы бы лучше ситуацию пояснили, быть может решение будет в корне другим. Добавлено через 3 минуты и 12 секунд нет, не ошибаетесь. |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
Если объемы позволяют использовать коллекции.
если нет, смотрим в сторону GTT.
PS. Обычно системы проектируют так, чтобы транзакции фиксировало приложение. Фиксировать транзакцию в процедуре, в подобном случае, как бы не самый гуд практис. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: нет Всего: 17 |
Всем спасибо за помощь.
Приблизительный набор записей составляет около 25 тысяч строк. Решение пришло внезапно - добавил дополнительное поле и в него пишу идентефикатор потока (с применением блокировки), далее каждый поток уже знает что его, а что нет. |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |