2016-12-28 7 views
0

Мне нужно создать расписание для запуска заданий в oracle. Он будет работать в первый рабочий день месяца, но исключая праздники. Когда первый рабочий месяц месяца является праздником, чем бег должен быть следующий рабочий день после отпуска.График Oracle в первый день месяца без праздников

мне удалось с первым рабочим днем ​​каждого месяца и исключаем праздники, но я не знаю, как установить бег на трудодень после отпуска ...

ПРАЗДНИКОВ

DBMS_SCHEDULER.CREATE_SCHEDULE (
    schedule_name => 'SCHDL_COM_HOLIDAYS', 
    repeat_interval => 'FREQ=YEARLY; BYDATE=0101,0111;' 
); 

ПЕРВОГО WORKDAY

DBMS_SCHEDULER.CREATE_SCHEDULE (
    schedule_name => 'SCHDL_FIRST_WD', 
    repeat_interval => 'FREQ=MONTHLY; BYDAY=MON,TUE,WED,THU,FRI; EXCLUDE=SCHDL_COM_HOLIDAYS; BYSETPOS=1' 
); 

ответ

0

Выполняйте следующие шаги:

1) Создайте расписание для всех каникулы.

BEGIN 
    DBMS_SCHEDULER.create_schedule (
     schedule_name  => 'NYD_FRI', 
     repeat_interval => 'FREQ=YEARLY;BYDATE=1231;BYDAY=FRI', 
     comments   => 'Friday alternative for New Year''s Day'); 
    DBMS_SCHEDULER.create_schedule (
     schedule_name  => 'NYD_MON', 
     repeat_interval => 'FREQ=YEARLY;BYDATE=0102;BYDAY=MON', 
     comments   => 'Monday alternative for New Year''s Day'); 
    DBMS_SCHEDULER.create_schedule (
     schedule_name  => 'NewYearsDay', 
     repeat_interval => 'FREQ=YEARLY;BYDATE=0101;BYDAY=MON,TUE,WED,THU,FRI;' 
          || 'INCLUDE=NYD_FRI,NYD_MON', 
     comments   => 'New Year''s Day'); 
); 
END; 
/

2) Создайте расписание, в котором созданы все расписания, созданные выше.

BEGIN 
    DBMS_SCHEDULER.create_schedule (
     schedule_name  => 'FederalHolidays', 
     repeat_interval => 'NewYearsDay,MartinLutherKing,PresidentsDay,', 
     comments   => 'Federal Holidays'); 
END; 

3) Создайте работу, обратите внимание на «ИСКЛЮЧИТЬ» и вариант «BYSETPOS»

BEGIN 
    DBMS_SCHEDULER.create_job (
     job_name   => 'Run_Next_Day', 
     job_type   => 'PLSQL_BLOCK', 
     job_action  => 'begin Run_Next_Day; end; ', 
     repeat_interval => 'FREQ=MONTHLY; BYDAY=MON,TUE,WED,THU,FRI; byhour=14;byminute=30;bysecond=0; EXCLUDE=FederalHolidays; BYSETPOS=7', 
     enabled   => TRUE, 
     comments   => 'Skipping Holidays'); 
END; 
/
+0

Благодарим за сообщение. Не могли бы вы объяснить, почему мы создаем для этого работу? – Gadziu

+0

Я только что дал полное решение. Если у вас уже есть работа, вы можете включить в нее предложение 'exclude'. – XING

1

@XING поблагодарить вас за вашу помощь. Я полностью изменил ваше решение в соответствии с моими потребностями.

Ответ именно для моей проблемы является днем ​​

Нового года

BEGIN 
DBMS_SCHEDULER.create_schedule (
    schedule_name  => 'SCHD_NYD_MON', 
    repeat_interval => 'FREQ=YEARLY;BYDATE=0101;BYDAY=MON', 
    comments   => 'Monday alternative for New Year''s Day'); 
DBMS_SCHEDULER.create_schedule (
    schedule_name  => 'SCHD_NEW_YEAR_DAY', 
    repeat_interval => 'FREQ=YEARLY;BYDATE=0101;BYDAY=MON,TUE,WED,THU,FRI;' 
         || 'INCLUDE=SCHD_NYD_MON', 
    comments   => 'New Year''s Day'); 
END; 
/

день Первого Ноябрьского

BEGIN 
DBMS_SCHEDULER.create_schedule (
    schedule_name  => 'SCHD_FNOV_MON', 
    repeat_interval => 'FREQ=YEARLY;BYDATE=1101;BYDAY=MON', 
    comments   => 'Monday alternative for First November'); 
DBMS_SCHEDULER.create_schedule (
    schedule_name  => 'SCHD_FIRST_NOVEMBER', 
    repeat_interval => 'FREQ=YEARLY;BYDATE=1101;BYDAY=MON,TUE,WED,THU,FRI;' 
         || 'INCLUDE=SCHD_FNOV_MON', 
    comments   => 'First November''s Day'); 
END; 
/

Федеральных праздники

BEGIN 
    DBMS_SCHEDULER.create_schedule (
     schedule_name  => 'SCHD_HOLIDAYS', 
     repeat_interval => 'SCHD_NEW_YEAR_DAY,SCHD_FIRST_NOVEMBER', 
     comments   => 'Federal Holidays'); 
END; 
/

Работа

BEGIN 
    DBMS_SCHEDULER.create_job (
    job_name   => 'Run_Next_Day', 
    job_type   => 'PLSQL_BLOCK', 
    job_action  => 'begin Run_Next_Day; end; ', 
    repeat_interval => 'FREQ=MONTHLY; BYDAY=MON,TUE,WED,THU,FRI; 
          byhour=12;byminute=0;bysecond=0; 
          EXCLUDE=SCHD_HOLIDAYS; BYSETPOS=1', 
    enabled   => TRUE, 
    comments   => 'Skipping Holidays'); 
END; 
/