各位大侠:
我想做一个job,每个月 除了1到3号,每天都运行。应该怎么写啊?

解决方案 »

  1.   

    -- 创建另外一个存储过程,排除每个月的前三天调用执行!
    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;
    /-- 然后:每天调用这个存储过程!
      

  2.   


    --可以再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;
    /
      

  3.   

    SQL的作业无法实现、、你再看看电脑的任务计划。。怎么样、、
      

  4.   

    在jog中设置, 每天都执行.
    在存储过程中, 做一个判断,如果日期=1号,2号,3号. 存储过程不做操作,其它日期可以正常执行.
      

  5.   


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

  6.   

       这个貌似SQL的。