Я хочу создать работу dbms с помощью DBMS_JOB.SUBMIT пакет, который работает по будням (пн-пт) в 5:30 утра. Я не уверен, какие значения должны быть переданы в next_Day и интервал. Может ли кто-нибудь помочь?Как создать работу dbms, которая работает в будние дни (пн-пт) в 5:30
ответ
Сначала мы должны создать определенную функцию одного пользователя следующим образом: -
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;
/
Использование 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;
/
Я хочу, чтобы он создал его через пакет dbms_job, потому что на данный момент у меня нет прав на выполнение пакета dbms_scheduler. Не могли бы вы помочь? – Nik
@ user7349009 см. Мое обновление – Hawk
появляется ошибка рядом с ");" (где заканчивается работа). Просто вопрос - нужно ли нам закончить дело? – Nik
использовать dbms_scheduler. http://stackoverflow.com/questions/4152111/dbms-job-vs-dbms-scheduler – Rene