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

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


Вступление в Клуб: 17.09.2007
СообщениеВт Дек 11, 2007 13:49    Ответить с цитатой
Полезность: Нет оценки
итак, запуск некоего действия трижды в сутки через задания по расписанию

1. в справочнике "системные параметры" завожу экземпляр с кодом 'START_NEXT_HOUR' и значением равным 9 (почему 9 - см. код и п.4)
2. в ТБП "текстовые задания по расписанию" создаю новый экземпляр, далее редактирую текст pl/plus

Код:
  v_hh number;
begin
  v_hh := to_number(to_char(sysdate,'hh24'));
  if to_number([SYSTEM_PARAMS]::[GET]('START_NEXT_HOUR'))=v_hh then
    if v_hh>18 then
      v_hh := 9;
    else
      v_hh := v_hh+4;
      begin
        debug_log(sysdate,0);--<start operation>
      exception when others then
        null;
      end;
    end if;
    [SYSTEM_PARAMS]::[SET_VALUE]('START_NEXT_HOUR',false,v_hh);
  end if;
end;


3. задание ставлю в очередь с интервалом например 10 секунд
4. операция <start operation> будет запускаться в в 9:ХХ, 13:ХХ, 17:ХХ
5. если операция не будет работать больше 3 часов то ок, если будет тады ой
sergius_79
Участник со стажем


Вступление в Клуб: 08.07.2007
СообщениеСр Дек 12, 2007 14:31    Ответить с цитатой
Полезность: 1
Действительно, почему-то decode не понимает... Вот что значит непроверенные данные. А теперь проверенные данные:

v. 2.0
Код:
case when to_char(sysdate, 'HH24') < '10' then trunc(sysdate) + 10/24 when to_char(sysdate, 'HH24') < '15' then trunc(sysdate) + 15/24 when to_char(sysdate, 'HH24') < '20' then trunc(sysdate) + 20/24 else trunc(sysdate, 'HH24') + 30/24 end


v. 2.1
Код:
case to_char(sysdate, 'HH24') when '10' then trunc(sysdate) + 15/24 when '15' then trunc(sysdate) + 20/24 else trunc(sysdate, 'HH24') + 30/24 end


И ещё замечание - всё нужно писать одной строкой.

P.S. Сорри за оплошность.
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеСр Дек 12, 2007 18:30    Ответить с цитатой
Полезность: Нет оценки
sergius_79 пишет:
Поспешил малость (как обычно), после else нужно читать trunc(sysdate) + 30/24

Что-то пока не получается... На синтаксис уже не ругается, но время след.запуска устанавливает аж на 00:00 через 2-е суток (14-го).
Запуск в 18:20 с кодом case to_char(sysdate, 'HH24') when '19' then trunc(sysdate) + 20/24 when '20' then trunc(sysdate) + 21/24 else trunc(sysdate) + 19/24 end
По идее должна бы встать на 19-00. Или нет?
sergius_79
Участник со стажем


Вступление в Клуб: 08.07.2007
СообщениеЧт Дек 13, 2007 16:53    Ответить с цитатой
Полезность: 3
Тебе нужно в 19, 20 и 21 час? Тогда сделай так:

Код:
case when to_char(sysdate, 'HH24') < '19' then trunc(sysdate) + 19/24 when to_char(sysdate, 'HH24') < '20' then trunc(sysdate) + 20/24 when to_char(sysdate, 'HH24') < '21' then trunc(sysdate) + 21/24 else trunc(sysdate) + 19/24 + 1 end


И при выполнении операции "поставить задание в очередь" удали дату и время следующего выполнения... Опять же пишу умозрительно, но мне удавалось добиться необходимого поведения Smile
Если получится, напиши, ок?
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеЧт Дек 13, 2007 18:16    Ответить с цитатой
Полезность: Нет оценки
sergius_79 пишет:
Если получится, напиши, ок?

ОК! Все получилось! Немного глючит штатный интерпретатор выражения, из-за чего с предложенным выражением программа полагает, что интервал запуска составляет две недели плюс два дня Smile
Именно поэтому, приходится очищать поле дата/время при запуске. Но - работает! Спасибо!
pychick
Участник


Вступление в Клуб: 28.01.2009
СообщениеПн Фев 15, 2010 15:36    Ответить с цитатой
Полезность: Нет оценки
sergius_79 пишет:
Действительно, почему-то decode не понимает... Вот что значит непроверенные данные. А теперь проверенные данные


Большое спасибо, очень помогло.
_________________
семь раз отпей, один отъешь
dimyaz86
Участник


Вступление в Клуб: 13.09.2016
СообщениеЧт Авг 03, 2017 11:28    Ответить с цитатой
Полезность: Нет оценки
А кто знает как запускаются эти задания по факту? Напрямую у каждого задания есть job в oracle? или есть job который их стартует?
А точнее интересует, то что у задания есть различные параметры, как на нем, так и в его журнале. Хотелось бы с операции выцеплять этот экземпляр и заполнять его нужными цифрами.
Gobur
Профи


Вступление в Клуб: 06.11.2012
СообщениеЧт Авг 03, 2017 12:53    Ответить с цитатой
Полезность: Нет оценки
dimyaz86 пишет:
А кто знает как запускаются эти задания по факту? Напрямую у каждого задания есть job в oracle? или есть job который их стартует?
А точнее интересует, то что у задания есть различные параметры, как на нем, так и в его журнале. Хотелось бы с операции выцеплять этот экземпляр и заполнять его нужными цифрами.

job в оракле - можешь в сессиях их даже смотреть. У ЦФТ уже реализована операция - Изменить параметры, в которой периодичность задается. Ну и плюс есть операции по останову и запуску. По останову и запуску - в ЗОД используем - определнные задания тормозим, потом снова запускаем
dimyaz86
Участник


Вступление в Клуб: 13.09.2016
СообщениеЧт Авг 03, 2017 15:16    Ответить с цитатой
Полезность: Нет оценки
Gobur пишет:
dimyaz86 пишет:
А кто знает как запускаются эти задания по факту? Напрямую у каждого задания есть job в oracle? или есть job который их стартует?
А точнее интересует, то что у задания есть различные параметры, как на нем, так и в его журнале. Хотелось бы с операции выцеплять этот экземпляр и заполнять его нужными цифрами.

job в оракле - можешь в сессиях их даже смотреть. У ЦФТ уже реализована операция - Изменить параметры, в которой периодичность задается. Ну и плюс есть операции по останову и запуску. По останову и запуску - в ЗОД используем - определнные задания тормозим, потом снова запускаем


Я про то, что как обратиться к экземпляру Задания "SYSTEM_JOBS" внутри операции, которую он сам запустил? Есть ЦФТшный способ? Или надо селектить свою сессию и уже через нее выходить?
Guest_SPb
Участник со стажем


Вступление в Клуб: 27.02.2014
СообщениеЧт Авг 03, 2017 15:34    Ответить с цитатой
Полезность: Нет оценки
dimyaz86 пишет:

Я про то, что как обратиться к экземпляру Задания "SYSTEM_JOBS" внутри операции, которую он сам запустил? Есть ЦФТшный способ? Или надо селектить свою сессию и уже через нее выходить?


Смотря что понимается под словами "обратиться к экземпляру".
Возможно, под этим понимается запрос той информации, которую возвращает функция method_id(...) из библиотеки JOB_LIB в типе "Выполнение заданий по расписанию" ?
Посмотрите функции этой библиотеки - возможно тогда пропадёт половина вопросов.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Настройка и сопровождение Часовой пояс: GMT + 3
На страницу Пред.  1, 2
Страница 2 из 2

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