![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Диалог из оракловой хранимки. [Оракл]
ANB © (2008-01-29 17:57:00)Чего то не видно толковых вопросов.
А вот у меня давно назрел и толкового решения я так и не придумал.
Значится проблема : имеем хранимку, которая обрабатывает много документов/записей. В процессе обработки возникает проблема, вариант решения которой неплохо было бы уточнить у пользователя. Причем для разных документов вариант может быть разный.
Вопрос : как бы получше, с минимальными ресурсами, организовать обратную связь с клиентом, не прерывая работы хранимки ?
ANB (2008-01-29 18:59:00) [41]
> Ответ: получше было бы так не делать.
Дык и не делаю, потому как не умею :)
> разбей хранимку на части "без вопросов"
> между ними на клиенте вставляй вызов диалога
Есть у нас примеры таких хранимок - видели бы вы их код . . . А править их - ваще полное счастье . . .
> в данном случае вообще нельзя стартовать транзакцию
В оракле она сама стартует при первом изменении данных.
> на клиенте подписываешься на какую-нить очередь.
Проблема в том, что очередь нужно опрашивать. А опрашивать в той же сессии не получится - она занята выполнением хранимки. Плодить сессии тоже нехорошо - в одном проекте попробовали (для других целей) и 5 юзеров на испытаниях завалили сервер.
clickmaker (2008-01-29 18:58:00) [42]
> [5] Petr V. Abramov © (29.01.08 18:56)
а в оракуле это не настраивается?
тогда получится, что сервер может ведь и откатить слишком застоявшуюся транзакцию, так и не дождавшись юзера с перекура
Petr V. Abramov (2008-01-29 18:56:00) [43]
> clickmaker © (29.01.08 18:53) [4]
а транзакция никого не спрашивает, сама стартует на первом запросе.
clickmaker (2008-01-29 18:53:00) [44]
> Сам не пробовал и тебе не советую, чем дольше транзакция,
> тем больше вероятность
в данном случае вообще нельзя стартовать транзакцию
Petr V. Abramov (2008-01-29 18:51:00) [45]
> ANB © (29.01.08 17:57)
че-то ты недоброе задумал :)
навскидку можно через AQ, примерно так:
на клиенте подписываешься на какую-нить очередь.
в хранимке когда надо спросить, кладешь в эту очередь сообщение с сутью вопроса и виснешь на dbms_aq.listen. когда клиент удосужится ответить, он кладет в очередь, которую ты listen, сообщение с сутью ответа. Хранимка отвисает, проверяет, что сообщение именно ей, если да, продолжает работать, если нет - висеть.
Сам не пробовал и тебе не советую, чем дольше транзакция, тем больше вероятность, что она повесит другие по блокировкам.
clickmaker (2008-01-29 18:37:00) [46]разбей хранимку на части "без вопросов"
между ними на клиенте вставляй вызов диалога
DiamondShark (2008-01-29 18:35:00) [47]
> Вопрос : как бы получше, с минимальными ресурсами, организовать
> обратную связь с клиентом, не прерывая работы хранимки ?
Ответ: получше было бы так не делать.
А можно в Оракле использовать внешние DLL или COM-объекты? Если можно, то реализовать связь через них.