2016-12-28 4 views
0

oracle에서 실행 작업에 대한 일정을 생성해야합니다. 매월 첫 번째 근무일에 운영되지만 휴일은 제외됩니다. 월의 첫 번째 근무일이 공휴일 인 경우, 연휴가 끝나면 다음 영업일이어야합니다. 오라클이없는 달 첫날 오라클 일정

나는 매월 첫째 근무일로 관리 및 공휴일 제외,하지만 난 ... 휴가 후 근무 시간에 실행을 설정하는 방법을 알고

휴일

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

FIRST 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; 
/

먼저 11 월 일

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; 
/