2017-02-14 5 views
0

Я хочу создать работу dbms с помощью DBMS_JOB.SUBMIT пакет, который работает по будням (пн-пт) в 5:30 утра. Я не уверен, какие значения должны быть переданы в next_Day и интервал. Может ли кто-нибудь помочь?Как создать работу dbms, которая работает в будние дни (пн-пт) в 5:30

+0

использовать dbms_scheduler. http://stackoverflow.com/questions/4152111/dbms-job-vs-dbms-scheduler – Rene

ответ

0

Сначала мы должны создать определенную функцию одного пользователя следующим образом: -

CREATE OR REPLACE FUNCTION GET_DATE RETURN DATE 
is 

V_DAY VARCHAR2(10); 
V_DATE DATE; 

BEGIN 

SELECT (to_char(sysdate,'fmDay')) INTO V_DAY FROM DUAL; 

IF(V_DAY='Monday' OR V_DAY='Tuesday' OR V_DAY='Wednesday' OR V_DAY='Thursday') THEN 


SELECT trunc(sysdate+1)+05/24+30/1440 INTO V_DATE FROM DUAL; 
RETURN V_DATE; 

ELSE 

SELECT trunc(sysdate+3)+05/24+30/1440 INTO V_DATE FROM DUAL; 
RETURN V_DATE; 

END IF; 

END; 
/

После этого нам нужно создать работу следующим образом: -

DECLARE 
    XYZ NUMBER; 
BEGIN 
    SYS.DBMS_JOB.SUBMIT 
    (job  => XYZ 
    ,what  => 'BEGIN PROC_NAME; END;' 
    ,next_date => to_date('23/03/2017 05:30:00','dd/mm/yyyy hh24:mi:ss') 
    ,interval => 'GET_DATE' 
    ,no_parse => FALSE 
); 

END; 
/
2

Использование dbms_schedular пакет, который доступен с 10 г, вы можете использовать «repeat_interval параметр» следующим образом:

BEGIN 
    DBMS_SCHEDULER.CREATE_JOB (
      job_name => 'MY_JOB', 
      job_type => 'PLSQL_BLOCK', 
      job_action => 'your code', 
      number_of_arguments => 0, 
      start_date => NULL, 
      repeat_interval => 'FREQ=WEEKLY;BYTIME=053000;BYDAY=MON,TUE,WED,THU,FRI', 
      end_date => NULL, 
      enabled => FALSE, 
      auto_drop => FALSE, 
      comments => ''); 

END; 
/

Кроме того, если вы используете IDE, такие как SQL Developer, вы можете легко установить детали свою работу, не беспокоясь о синтаксисе. На самом деле, приведенный выше код генерируется SQL Developer

UPDATE
Попробуйте следующее с помощью DBMS_JOB (не проверено)

DECLARE 
    l_job_number NUMBER; 
BEGIN 
    dbms_job.submit( 
      job  => l_job_number , 
      what  => 'your code', 
      next_date => trunc(sysdate)+05/24+30/1440, 
      interval => CASE WHEN (to_char(sysdate,'Day') IN ('Monday','Tuesday','Wednesday','Thursday','Friday')) THEN trunc(sysdate)+05/24+30/1440 else null end 
     ); 
END; 
/
+0

Я хочу, чтобы он создал его через пакет dbms_job, потому что на данный момент у меня нет прав на выполнение пакета dbms_scheduler. Не могли бы вы помочь? – Nik

+0

@ user7349009 см. Мое обновление – Hawk

+0

появляется ошибка рядом с ");" (где заканчивается работа). Просто вопрос - нужно ли нам закончить дело? – Nik

Смежные вопросы