![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Диалог из оракловой хранимки. [Оракл]
ANB © (2008-01-29 17:57:00)Чего то не видно толковых вопросов.
А вот у меня давно назрел и толкового решения я так и не придумал.
Значится проблема : имеем хранимку, которая обрабатывает много документов/записей. В процессе обработки возникает проблема, вариант решения которой неплохо было бы уточнить у пользователя. Причем для разных документов вариант может быть разный.
Вопрос : как бы получше, с минимальными ресурсами, организовать обратную связь с клиентом, не прерывая работы хранимки ?
clickmaker (2008-01-30 13:18:00) [21]
> А кто задавал юзеру вопросы ?
тонкий клиент
ANB (2008-01-30 13:16:00) [22]
> сервере приложений
Ни на фиг не нужен обычно. Одни проблемы с ним - лишний слой сопровождать.
> Но последний тоже вопросов юзеру не задавал, ибо был сервисом
А кто задавал юзеру вопросы ?
clickmaker (2008-01-30 12:55:00) [23]
> [24] ANB © (30.01.08 12:47)
>
> > clickmaker © (30.01.08 12:44) [23]
>
> А проектировал базу, у которой тонкий клиент
почти. Логика была в хранимках и сервере приложений. Но последний тоже вопросов юзеру не задавал, ибо был сервисом
ANB (2008-01-30 12:47:00) [24]
> clickmaker © (30.01.08 12:44) [23]
А проектировал базу, у которой тонкий клиент и ВСЯ логика живет в хранимках + метаданные ?
clickmaker (2008-01-30 12:44:00) [25]
> [22] ANB © (30.01.08 12:42)
сколько не проектировал баз - ни разу такой нужды не было.
точно что-то не так делал
ANB (2008-01-30 12:42:00) [26]
> Смешано 2 вещи - предварительные проверки и собственно сохранение.
> 2 хранимки было бы в самый раз.
Да при грамотном проектировании такая проблема вылезти не должна.
Но ктож у нас грамотно проектирует ? Посему, по любому вылезет.
ANB (2008-01-30 11:58:00) [27]Фух. Предварительно обмен ботает.
Осталась одна проблема - в сессиях я вижу тока имя своей машины. Причем не факт, что я смогу по этому имени приконнектится (оракл и клиент могут быть в разных доменах). Как нибудь мона узнать в оракле ИП своей машины ?
Desdechado (2008-01-30 11:40:00) [28]
> Соответственно, регистрим, например, документ. В процессе
> выясняется, что на счете возникает красное сальдо. В старой
> системе пользователя справшиваем - чего с ним делать.
Смешано 2 вещи - предварительные проверки и собственно сохранение. 2 хранимки было бы в самый раз.
ANB (2008-01-30 11:30:00) [29]Хотя не. На 9-ке стартует, но не видит мою машину.
ANB (2008-01-30 11:26:00) [30]Милин 2. Чего то в оракле не хватает - не ботает пакет.
Говорит, что не хватает класса TCPConnection.
Вывод - если базу ставить по дефолту - пахать не будет.
Очень жаль.
ANB (2008-01-30 11:22:00) [31]Милин. Северный пушной зверь.
Беру прямо из этого пакета пример, а он даже не компилится.
Совсем индусы оборзели.
ANB (2008-01-30 11:15:00) [32]
> Сложить в настройки. Отдельно режим настроек сделать, которые
> потом (до запуска ХП) можно просто в сессионные переменные
> пакета записать и проверять при необходимости в процессе
> выполнения хранимки.
Обломайся. Пытались - не получается. Пока тупо оставляем документы необработанными и пишем их в лог. Юзеры жалуются - типа на старой системе мона было ответить на вопрос и идти дальше.
К сожалению, запросы выполнять, пока хранимка выполняется, нельзя.
Из-за чего проблема : есть старая система, в которой вся бизнес-логика живет на клиента.
Соответственно, регистрим, например, документ. В процессе выясняется, что на счете возникает красное сальдо. В старой системе пользователя справшиваем - чего с ним делать. Т.е. отменить регистрацию, заболтить на проблему, поставить документ на картотеку (и некоторые параметры картотеки). Причем алгоритмизировать выбор не получается (иначе бы сразу так сделали), т.е. юзер по ему известным причинам может выбрать любой вариант.
В новой системе потихоньку переписываем по надобности логику на хранимки. Новый функционал сразу пишем на хранимках. Есть совсем новячая система, для которой вообще хотелось бы закрыть доступ к таблицам и все сделать на хранимках.
Есть конечно простой выход - в хранимке обрабатывать один документ и вызывать ее циклом с клиента, но это намного медленнее.
Как доп. фича от реализации такой функции - можна с клиента вместо поднятия диалога просто трассировать ход выполнения хранимки (все равно клиент ничего не делает, в лучшем случае крутить мультики).
Тут я накопал путь к решению - есть пакетик utl_tcp. Седня попробую.
Petr V. Abramov (2008-01-30 01:44:00) [33]это все может иметь смысл, если в конторе зоопарк систем, и в какой-то момент все сливается в ПРАВИЛЬНУЮ, т.е. oracle :)
и может возникнуть ситуация, когда, спотыкнувшись на 10020-м документе, остальные 50000 сливать либо не надо, либо под ответственность оператора заливки.
Desdechado (2008-01-29 21:19:00) [34]> В процессе обработки возникает проблема, вариант решения
> которой неплохо было бы уточнить у пользователя. Причем
> для разных документов вариант может быть разный.
Сложить в настройки. Отдельно режим настроек сделать, которые потом (до запуска ХП) можно просто в сессионные переменные пакета записать и проверять при необходимости в процессе выполнения хранимки.
MsGuns (2008-01-29 20:28:00) [35]Побочный эффект почитателей все что можно и нельзя волочить на сервер
Petr V. Abramov (2008-01-29 19:31:00) [36]основная проблема, ИМХО, будет не получить уведомление, а ответить, т.е выполнить запрос, пока не завершился первый.
Petr V. Abramov (2008-01-29 19:09:00) [37]в любом случае шанс собрать все известные и неизвестные 600-е сильно повышается.
Petr V. Abramov (2008-01-29 19:05:00) [38]
> clickmaker © (29.01.08 18:58) [6]
он терпеливый
> ANB © (29.01.08 18:59) [7]
> Проблема в том, что очередь нужно опрашивать.
не нужно, можно асихронно подписаться. вот будет ли эта асинхронка срабатывать, пока вызов не завершился - не знаю, попробуй, расскажи.
clickmaker (2008-01-29 19:05:00) [39]
> Есть у нас примеры таких хранимок - видели бы вы их код
> . . . А править их - ваще полное счастье . . .
Ну вы уж определитесь... Тогда проектируйте бизнес-логику, чтобы она вопросов не задавала. Собирайте все данные изначально, и скопом в хранимку.
Как вариант, делать все что можно, без вопросов, остальное складывать в некую очередь. По завершении хранимки, если там что-то есть, спрашивать у клиента: "то-то и то-то осталось недоделанным, добить?", ну и какие-то доп. данные, может
Правильный_Вася (2008-01-29 18:59:00) [40]смешивать бизнес-логику и интерфейсные решения - дурной тон