![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Диалог из оракловой хранимки. [Оракл]
ANB © (2008-01-29 17:57:00)Чего то не видно толковых вопросов.
А вот у меня давно назрел и толкового решения я так и не придумал.
Значится проблема : имеем хранимку, которая обрабатывает много документов/записей. В процессе обработки возникает проблема, вариант решения которой неплохо было бы уточнить у пользователя. Причем для разных документов вариант может быть разный.
Вопрос : как бы получше, с минимальными ресурсами, организовать обратную связь с клиентом, не прерывая работы хранимки ?
ANB (2008-02-01 16:35:00) [1]
> вторая для batch обработки документов, вызывает первую for
> each doc do первая_хранимка, без транзакций и блокировок
Дык так уже сделано. Вот только документы, по которым нужны уточнения, отбрасываются. Писано уже выше.
> с вопросами сервер не уйдет в монопольный доступ одному
> пользователю?
С хрена бы он ушел ? Сессия спокойно спит и ждет ответа. Если с блокировками не перемутить, то никому не мешает.
Slym (2008-02-01 05:30:00) [2]с вопросами сервер не уйдет в монопольный доступ одному пользователю?
2 хранимки...
первая для одного документа, с транзакциями прочее
вторая для batch обработки документов, вызывает первую for each doc do первая_хранимка, без транзакций и блокировок
+ [42]
ANB (2008-01-31 13:54:00) [3]
> я б все-таки не мучался, а сделал, например, так:
>
> хранимка работает себе спокойно в пакетном режиме, обрабатывая
> документы, условно, с флагом "не проведен", доходит до проблемного
> документа, завершается с соотв. кодом.
> клиент этот код анализирует, спрашивает оператора, опять
> запускает хранимку до след. проблемного документа
Дык так ща и делаем. Вот только назвать это "не мучился" очень тяжело. Скорее наоборот.
Игорь Шевченко (2008-01-30 21:19:00) [4]Стояла аналогичная проблема. Послали нафиг, так как ораклу ораклово, а юзеру юзерово. Сделал примерно как в [42]
Суть вопроса - надо вводить людей (Фамилия,Имя,Отчество и еще куча половых признаков). Могут встречаться однофамильцы, а могут одну и ту же персону N раз ввести. Вот и надо спросить - мол, а уверен ли ты, что не одного и того же тупо вводишь ?
atruhin (2008-01-30 20:46:00) [5]А что произойдет при таком решении если клиент 2 экземпляра ПО запустит?
Или по какой либо причине в терминале, из разных сесий?
Petr V. Abramov (2008-01-30 19:14:00) [6]
> ANB © (30.01.08 16:28) [41]
я б все-таки не мучался, а сделал, например, так:
хранимка работает себе спокойно в пакетном режиме, обрабатывая документы, условно, с флагом "не проведен", доходит до проблемного документа, завершается с соотв. кодом.
клиент этот код анализирует, спрашивает оператора, опять запускает хранимку до след. проблемного документа
ANB (2008-01-30 16:28:00) [7]
> да первого файрвола это все
та пофигу. файервол может и коннект с ораклом по дури зарубить
Petr V. Abramov (2008-01-30 16:26:00) [8]
> ANB © (30.01.08 15:56) [39]
да первого файрвола это все
ANB (2008-01-30 15:56:00) [9]Нашел
select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual
ANB (2008-01-30 15:51:00) [10]
> utl_inaddr.get_host_address(USERENV('terminal'))
Та как то резолвить с сервера обратно не очень. УТЛ_ТСП и сам разрезолвит, если очень надо будет.
Должен же где то оракл у себя ИП клиента хранить по идее.
HSolo (2008-01-30 15:38:00) [11]> как на сервере узнать ИП машины сессии
А так не пойдёт?
utl_inaddr.get_host_address(USERENV('terminal'))
ANB (2008-01-30 15:03:00) [12]
> Sergey13 © (30.01.08 14:44) [35]
Да способов как то обойти недостающий функционал дохрена.
Но как то все равно хочется его иметь.
Короче, проблема уже практически нашла теоретическое решение. Мона даже писать тестовое приложение.
Остался вопрос - как на сервере узнать ИП машины сессии. Хотя чет я туплю. мона же с клиента при надобности передать.
Sergey13 (2008-01-30 14:44:00) [13]> [34] ANB © (30.01.08 14:14)
Можно принять, что обработка 1 документа является частным случаем пакетной обработки. Я бы наверное пошел таким путем.
ANB (2008-01-30 14:14:00) [14]
> Ну а если откладывать проблемные документы в какой то контейнер
> с указанием причины. Потом сообщить юзеру, что были такие
> вот затыки и попросить принять по ним решение. После этого
> запустить пересчет проблемных документов.
Для пакетного режима у нас сейчас так и сделано.
Т.е. по необработанным документам ведется лог ошибок, сами документы остаются на старом статусе. Потом юзер их по одному обрабатывает и отвечает на вопросы. Но в результате код обработки живет в двух местах. Отдельно для пакетного режима, отдельно для ручного.
> вот здесь бы как раз и пригодился сервер приложений.
Только ради обратной связи писать аппсервер лениво. Все остальные примочки оракл нормально кушает.
Sergey13 (2008-01-30 13:52:00) [15]> [31] ANB © (30.01.08 13:44)
Ну а если откладывать проблемные документы в какой то контейнер с указанием причины. Потом сообщить юзеру, что были такие вот затыки и попросить принять по ним решение. После этого запустить пересчет проблемных документов.
clickmaker (2008-01-30 13:51:00) [16]
> [31] ANB © (30.01.08 13:44)
вот здесь бы как раз и пригодился сервер приложений.
Поскольку в нем легче организовать обратную связь.
Я делал, но не вопросы, а оповещение о некоем событии. Только отказался от глючных ConnectionPoints, а делал через mailslot
ANB (2008-01-30 13:44:00) [17]
> или там все сильно зависит от конкретного документа?
Вот именно это. Иначе давно бы от диалога и на клиенте избавились.
Оператор чешет репу, спрашивает буха и они принимают решение в зависимости от крутости клиента и погоды в Гватемале.
clickmaker (2008-01-30 13:41:00) [18]а, то есть это?
> В процессе выясняется, что на счете возникает красное сальдо.
> В старой системе пользователя справшиваем - чего с ним делать.
> Т.е. отменить регистрацию, заболтить на проблему, поставить
> документ на картотеку (и некоторые параметры картотеки).
> Причем алгоритмизировать выбор не получается (иначе бы сразу
> так сделали), т.е. юзер по ему известным причинам может
> выбрать любой вариант.
а нельзя предварительно некие настройки завести, типа такого:
что делать, если возникает красное сальдо:
(*) заболтить
( ) отменить регистрацию
( ) поставить документ на картотеку
-- Параметры картотеки --------
---------------------------------
или там все сильно зависит от конкретного документа?
ANB (2008-01-30 13:37:00) [19]
> а что, кстати, за проблема?
Ну один пример я уже написал выше.
Вообще то чаще всего, можно выкрутится без доп запросов. В крайнем случае, можно проехать клиенту по ушам и сказать, что нет технической возможности. А если хочет перенести код на клиента, то надо доплатить и будет медленнее работать. Обычно клиент соглашается оставить как есть.
Но хотелось бы таки возможность иметь. Где то быстро дырку заткнуть, потом, если надо, переписать по человечески, или еще для какой надобности. Имхо - удобно иметь такую фичу. В ее отсутствие возникает соблазн писать логику на клиенте, а это вешалка потом при сопровождении.
clickmaker (2008-01-30 13:22:00) [20]
> В процессе обработки возникает проблема, вариант решения
> которой неплохо было бы уточнить у пользователя
а что, кстати, за проблема?
просто интересно