CftClub.ru
Клуб специалистов ЦФТ-Банк

Ожидать выполнения внешней задачи
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Emel
Участник со стажем


Вступление в Клуб: 02.07.2007
СообщениеСр Ноя 28, 2007 18:10   Ожидать выполнения внешней задачи Ответить с цитатой
Полезность: Нет оценки
Привет всем

есть ТЕЛО

ParIo integer;
begin
ParIo := stdio.open('.\tmp','Par.txt','w');
stdio.put_line( ParIo, 'DATC;D;' || to_char( P_DAT , 'DD/MM/YYYY' ) || chr( 13 ));
stdio.put_line( ParIo, 'DATP;D;' || to_char( P_DATPO , 'DD/MM/YYYY')|| chr( 13 ));
stdio.put_line( ParIo, 'REPVNEB;N;' || to_char( P_GF , '99')|| chr( 13 ));
stdio.close( ParIO );
stdio.put_line_buf( '<% SHELL_COMMAND f:\pr_bank\od\cft071113.bat %>' );
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Можно здесь дождаться завершения выполнения BAT файла и продолжить дальше работу в ЦФТ


debug_pipe( '***Конец***', 0 );
debug_pipe( '', 0 );
end;
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Ноя 29, 2007 07:52    Ответить с цитатой
Полезность: 3
Нет, простым методом не получится, т.к. серверная часть (тело операции) и клиентская часть (Навигатор) выполняются асинхронно.

Как вариант, можно организовать какой-нибудь "семафор". Типа, bat-файл выставляет флаг (напр, создает файл на сервере с определенным именем, или делает запись в табличку Oracle), а операция ждет появления этого флага. Правда здесь можно нарваться на вечный цикл, если поломается выполнение bat-файла.
dbmaslov
Профи


Вступление в Клуб: 11.07.2007
СообщениеЧт Ноя 29, 2007 08:31    Ответить с цитатой
Полезность: 1
нормальный проверенный метод, чтобы избежать бесконечных циклов, необходимо вставить счетчик итераций...конечно если время выполнения BAT - можно спрогнозировать с некоторой погрешностью....
_________________
Маслов Дмитрий
faded
Участник со стажем


Вступление в Клуб: 17.09.2007
СообщениеЧт Ноя 29, 2007 10:47    Ответить с цитатой
Полезность: Нет оценки
я бы сделал так:
- первая операция оканчивается shell_command и call 2 операции
- вызов второй операции происходит после выполнения shell_command
- вторая операция делает то что нужно и затем может продолжить действия (если очень хочется вызвать первую операцию с неким параметром успешности)
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Ноя 29, 2007 11:54    Ответить с цитатой
Полезность: 1
faded пишет:
я бы сделал так:
- первая операция оканчивается shell_command и call 2 операции
- вызов второй операции происходит после выполнения shell_command
- вторая операция делает то что нужно и затем может продолжить действия (если очень хочется вызвать первую операцию с неким параметром успешности)


Не будет работать, т.к. Навигатор делает вызов shell_command и не ждет окончания выполнения команды, а идет дальше.
faded
Участник со стажем


Вступление в Клуб: 17.09.2007
СообщениеЧт Ноя 29, 2007 12:26    Ответить с цитатой
Полезность: Нет оценки
согласен. был не прав с ожиданием
Emel
Участник со стажем


Вступление в Клуб: 02.07.2007
СообщениеЧт Ноя 29, 2007 14:25    Ответить с цитатой
Полезность: Нет оценки
Жаль ..................
Спасибо Всем за ответы
Joker
Участник - экстремал


Вступление в Клуб: 09.06.2007
СообщениеЧт Ноя 29, 2007 15:27    Ответить с цитатой
Полезность: Нет оценки
Emel пишет:
Жаль ..................
Спасибо Всем за ответы


Чего жаль то? Что файлик из батника создать придется и его наличие клиент-скриптом проверить? Или что Вам ответили, а оценку полезности не получили?
AlexV
Гуру


Вступление в Клуб: 29.06.2007
СообщениеЧт Ноя 29, 2007 15:52    Ответить с цитатой
Полезность: 5
Еще идея.

В конце bat-файла (через sqlplus и крохотное приседание) свистнуть в оракловый pipe.
А процедура на сервере вычитывает pipe в "трепетном" ожидании.
_________________
IT-Команда предлагает свои услуги:
http://www.cftclub.ru/viewtopic.php?t=909
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПт Ноя 30, 2007 06:56    Ответить с цитатой
Полезность: Нет оценки
AlexV пишет:
Еще идея.

В конце bat-файла (через sqlplus и крохотное приседание) свистнуть в оракловый pipe.
А процедура на сервере вычитывает pipe в "трепетном" ожидании.


Здраво. +1
OlegFB
Участник - экстремал


Вступление в Клуб: 11.07.2007
СообщениеПт Дек 07, 2007 08:33    Ответить с цитатой
Полезность: Нет оценки
Всёж с файлом-семафором было б проще...
а тут придется извращаться с именем пайпы и тыды и тыпы...
то бишь маленькое приседание, может вылится в очень извращенный секс
AlexV
Гуру


Вступление в Клуб: 29.06.2007
СообщениеПт Дек 07, 2007 08:54    Ответить с цитатой
Полезность: 1
Мой богатый опыт написания всевозможных автономных роботов говорит мне, что "файлы-семафоры" - это самый последний и отчаянный шаг! Файлы имеют привычку "залипать" по различным причинам. Опять же, права на создание (через FIO планируется его создавать, не так ли?).
Да и в чем проблема с именованием канала? Назовите его: ВАШБАНК$ИМЯОПЕРАЦИИ.

Повезет отчасти тем, у кого ORACLE вертится на Win32, где каталог можно предоставить во всеобщий доступ средствами Билла Гейтса. Тогда мой Вам совет - используйте замечательную конструкцию:

Код:
start cmd /c batchfile.bat > \\server\share\semaphore.bsy


Файл \\server\share\semaphore.bsy создается и лочится(!) до тех пор, пока выполняется batchfile.bat. Оракловой процедуре остается периодически проверять наличие этого файла, удалять его(!), если залип, ну и продолжать потом свое выполнение.

Правда, кто из модных пацанов пользует ORACLE на этой платформе? Wink
_________________
IT-Команда предлагает свои услуги:
http://www.cftclub.ru/viewtopic.php?t=909
OlegFB
Участник - экстремал


Вступление в Клуб: 11.07.2007
СообщениеПт Дек 07, 2007 09:08    Ответить с цитатой
Полезность: Нет оценки
AlexV пишет:
Мой богатый опыт написания всевозможных автономных роботов говорит мне, что "файлы-семафоры" - это самый последний и отчаянный шаг! Файлы имеют привычку "залипать" по различным причинам. Опять же, права на создание (через FIO планируется его создавать, не так ли?).
Да и в чем проблема с именованием канала? Назовите его: ВАШБАНК$ИМЯОПЕРАЦИИ.

Повезет отчасти тем, у кого ORACLE вертится на Win32, где каталог можно предоставить во всеобщий доступ средствами Билла Гейтса. Тогда мой Вам совет - используйте замечательную конструкцию:

Код:
start cmd /c batchfile.bat > \\server\share\semaphore.bsy


Файл \\server\share\semaphore.bsy создается и лочится(!) до тех пор, пока выполняется batchfile.bat. Оракловой процедуре остается периодически проверять наличие этого файла, удалять его(!), если залип, ну и продолжать потом свое выполнение.

Правда, кто из модных пацанов пользует ORACLE на этой платформе? Wink


ВАШБАНК$ИМЯОПЕРАЦИИ. -подходит только при монопольном запуске операции...
а ежели эта операция может быть запущена одновременно?

То бишь, я не отрицаю вашего варианта, но!
И, кстати, за 5 лет общения с ЦФТ я ни разу не сталкивался с залипанием файла... можете мне не верить Wink - в уралсибе долгое время (как минимум до прошлого года) работало несколько файловых шлюзов с разными системами и имено с семафорами, кстати, может быть проблем не возникало, потому что всё операции совершались с файлами на сервере под *nix? (через самбу)
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Дек 07, 2007 11:35    Ответить с цитатой
Полезность: Нет оценки
AlexV пишет:
...
Правда, кто из модных пацанов пользует ORACLE на этой платформе? Wink


У нас Oracle как раз и крутится на Win32 (ибо не можем позволить себе квалифицированного юниксоида и справляемся в основном своими силамиSad).... время от времени файло залипает... благо только в папках децентрализованных филиалов... и лечится это тока перезапуском сервера...
_________________
всегда есть как минимум 2 выхода
OlegFB
Участник - экстремал


Вступление в Клуб: 11.07.2007
СообщениеПт Дек 07, 2007 12:22    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
AlexV пишет:
...
Правда, кто из модных пацанов пользует ORACLE на этой платформе? Wink


У нас Oracle как раз и крутится на Win32 (ибо не можем позволить себе квалифицированного юниксоида и справляемся в основном своими силамиSad).... время от времени файло залипает... благо только в папках децентрализованных филиалов... и лечится это тока перезапуском сервера...

что такое не везёт и как с ним бороться...
По поводу квалифицированного юниксоида... - он стоит куда меньше чем квалифицированный ораклоид...
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru