各位大侠:
我想做一个job,每个月 除了1到3号,每天都运行。应该怎么写啊?
我想做一个job,每个月 除了1到3号,每天都运行。应该怎么写啊?
解决方案 »
- 新手请教
- linux下连接windows xp下的oracle出现连接超时或目的主机不可达
- linux问题: sudo su - root
- 请教oracle如何将查询结果导出为txt文件
- 求一个SQL语句
- sqlplus登录问题,用system/orcl可以登录,用system/orcl@orcl就登录不了,就死在那里,没有任何提示.
- 请教oarcle高手!!!!!
- 如何查看select语句用到了哪些索引
- 字符串一部分是数字,如何+1
- 请教 proc 问题, 执行 EXEC SQL select * from XXX ,oracle 会报 2112 错误: SELECT..INTO returns too many rows
- Oracle创建表时进行检查约束,为什么不能插入数据,具体见内?
- Oracle建表问题
CREATE OR REPLACE PROCEDURE p_exec_proc
IS
v_days number(2,0);
BEGIN
SELECT to_char(sysdate,'dd') into v_days from dual;
IF v_days >=4 THEN -- 如果是 4 号或以后
proc_name(var1,var2,var3,...);
END IF;
END;
/-- 然后:每天调用这个存储过程!
--可以再interval参数中设置,判断是否是每个月的前三天,并做相应处理
--如下:
DECLARE
v_jobno NUMBER;
BEGIN
dbms_job.submit(v_job,
'begin pro; end;',
trunc(sysdate)+2/24, --假设每天凌晨2点执行你的过程
'case when to_char(sysdate+1,''dd'')=''01'' then trunc(sysdate)+4+2/24
when to_char(sysdate+1,''dd'')=''02'' then trunc(sysdate)+3+2/24
when to_char(sysdate+1,''dd'')=''03'' then trunc(sysdate)+2+2/24
else trunc(sysdate)+1+2/24
end' --判断下次执行时间是否是头三天,并做相应处理
);
END;
/
在存储过程中, 做一个判断,如果日期=1号,2号,3号. 存储过程不做操作,其它日期可以正常执行.
begin
dbms_scheduler.create_schedule(
schedule_name=>'exclude_sched',
repeat_interval=>'freq=monthly;bymonthday=1,2,3');
dbms_scheduler.create_schedule(
schedule_name=>'main_sched',
repeat_interval=>'freq=daily;exclude=exclude_sched');
dbms_scheduler.create_job(
job_name=>'...',schedule_name=>'main_sched',job_type='...',job_action='...');
end;
/