如何创建在工作日(周一至周五)上午 5:30 运行的 dbms 作业
How to create dbms job that runs on weekdays(Mon-Fri) at 5:30 AM
我想使用 DBMS_JOB.SUBMIT 程序包创建 dbms 作业,该程序包在工作日(周一至周五)上午 5:30 运行。我不确定应该在 next_Day 和间隔中传递什么值 任何人都可以帮忙吗?
使用从 10g 开始可用的 dbms_schedular 包,您可以使用 '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,您可以轻松设置作业的详细信息,而无需担心语法。其实上面的代码是SQLDeveloper
生成的
更新
使用 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;
/
首先我们需要创建一个用户定义的函数,如下所示:-
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_JOB.SUBMIT 程序包创建 dbms 作业,该程序包在工作日(周一至周五)上午 5:30 运行。我不确定应该在 next_Day 和间隔中传递什么值 任何人都可以帮忙吗?
使用从 10g 开始可用的 dbms_schedular 包,您可以使用 '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,您可以轻松设置作业的详细信息,而无需担心语法。其实上面的代码是SQLDeveloper
生成的更新
使用 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;
/
首先我们需要创建一个用户定义的函数,如下所示:-
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;
/