Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 DBMS_JOB Выполнение в определенные дни недели  [new]
alex_soft
Member

Откуда:
Сообщений: 33
Подскажите пожалуйста как выполнить DBMS_JOB в определнные дни недели например:
Каждую среду в 05:00:00
Каждую пятницу в 05:00:00

А то каждый день как-то грубо. Есть сутки в которых сервак загружен на все 100%. Поэтому хотя бы два раза в неделю.
28 мар 06, 11:37    [2496484]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
как
28 мар 06, 11:43    [2496514]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
Создаешь два задания - одно с запуском в среду, второе - с запуском в пятницу. Интервал выполнения каждым задаешь в неделю. И все. Каждую среду и пятницу твои задания выполняются.
28 мар 06, 12:18    [2496713]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Kovalchuk Vitaly V
Member

Откуда: ненька Україна
Сообщений: 463
Tolmachov Dmitiry
Создаешь два задания - одно с запуском в среду, второе - с запуском в пятницу. Интервал выполнения каждым задаешь в неделю. И все. Каждую среду и пятницу твои задания выполняются.

Зачем два не понимаю можно и одним заданием извратнутся.
Ключевым моментом является подсчёт следующей даты выполнения.
interval => trunc(sysdate,'D') +  
   case 
    when to_char(Sysdate,'D') in ('3','4') then 125/24 
    else 77/24
  end

Вот полный пример.

declare
  i number;
begin
  dbms_job.submit(i,what => 'begin null; end;',next_date => sysdate,interval => 
  'trunc(sysdate,''D'') +  
   case 
    when to_char(Sysdate,''D'') in (''3'',''4'') then 125/24 
    else 77/24
  end ');
  dbms_output.put_line('job='||i);  
end;  
28 мар 06, 13:11    [2497069]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
To Kovalchuk Vitaly V:
Тогда уж
SYSDATE + CASE
         WHEN to_char(SYSDATE, 'D') = '3' THEN 2
         ELSE 4
       END
28 мар 06, 13:18    [2497128]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
Или вот
28 мар 06, 13:20    [2497136]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Elic
Member

Откуда:
Сообщений: 29976
2 Kovalchuk Vitaly V & Tolmachov Dmitiry
Ваши варианты NLS-недетерминированные.
28 мар 06, 13:22    [2497150]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Elic
Member

Откуда:
Сообщений: 29976
Tolmachov Dmitiry

SYSDATE + CASE
         WHEN to_char(SYSDATE, 'D') = '3' THEN 2
         ELSE 4
       END
И, кстати, это неправильно по многим параметрам.
28 мар 06, 13:25    [2497176]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
Kovalchuk Vitaly V
Member

Откуда: ненька Україна
Сообщений: 463
Tolmachov Dmitiry
To Kovalchuk Vitaly V:
Тогда уж
SYSDATE + CASE
         WHEN to_char(SYSDATE, 'D') = '3' THEN 2
         ELSE 4
       END

Не. Так будет каждый раз запаздывать. Надо обязательно trunc(sysdate) делать. И вы просто прибавляете к текущему моменту два или четыре дня. А я к началу недели либо 77/24 дня (3 дня 5 часов) либо 125/24 (5 дней 5 часов)
28 мар 06, 13:31    [2497210]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
alex_soft
Member

Откуда:
Сообщений: 33
Про два задания (среда и пятница) мне и так понятно было. А вот за примеры в которых так сказать два в одном (2 in 1) весьма благодарен.
Еще раз спасибо всем кто откликнулся и помог.
29 мар 06, 02:54    [2499988]     Ответить | Цитировать Сообщить модератору
 Re: DBMS_JOB Выполнение в определенные дни недели  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
есть еще вариант - написать обычный-разобачный триггер, который запускается ежедневно в 5-00. И внутри обкладки-процедуры разбор -
работать/выйти вон. Просто иначе, залудив триггер с переменным шагом - надо
аккуратно отследить то обстоятельство, что стартовать-то джоб д.б. можно
и в любой вторник/субботу/...
29 мар 06, 08:47    [2500198]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить