是不是可以这样,建立个每天凌晨运行的job。。如果是一号,则进行上个月的数据分析工作。

解决方案 »

  1.   

    DBMS_JOB.SUBMIT(:jobno, //job号 
                    ’your_procedure;’,//要执行的过程 
                    to_date(200-02-01 00:00:00, ‘yyyy:mm:dd hh24:mi:ss’),//下次执行时间 
                    add_month(to_date(200-02-01 00:00:00, ‘yyyy:mm:dd hh24:mi:ss’), 1) //每次间隔时间 
                   ); 
      

  2.   

    也可以写好存储过程,
    然后用批处理命令,调用存储过程.
    将批处理放在windows的任务栏.
      

  3.   

    begin
      sys.dbms_job.submit(job => :job,
                          what => 'p_crm_getdata1(to_char(sysdate,''yyyymm''));',
                          next_date => to_date('01-01-4000', 'dd-mm-yyyy'),
                          interval => 'to_date(to_char(sysdate+1,''yyyymmdd'')||''23:00:00'',''yyyymmdd hh24:mi:ss'')');
      sys.dbms_job.broken(job => :job,
                          broken => true,
                          next_date => to_date('01-01-4000', 'dd-mm-yyyy'));
      commit;
    end;
    /
      

  4.   

    上面的最后一个参数应该是varchar2型的, 自行改过。
    思路是每月执行一次。
    详细资料如下:利用Oracle的Job Queue实现定时操作 
     
    1、确保Oracle的工作模式允许启动队列管理器(SNP进程) 
    SVRMGRL> Alter System Enable Restricted Session; 
    或 SQL> Alter System Disenable Restricted Session; 2、确保Oracle已配置任务队列管理器的启动参数 
    initSID.ora中: 
    job_queue_process=n(0);(0-36)个进程 
    job_queue_interval=N(60);(1-3600)秒唤醒 3、将任务加入数据库的任务队列中 
    DBMS_JOB.Submit ( 
    job out binary_integer, (任务号) 
    what in varchar2, (执行任务的名称及入参) 
    next_date in date, (任务执行的时间) 
    interval in varchar2, (任务执行的间隔。null:执行一次;sysdate+m:周期性,每隔m天执行) 
    no_parse in boolean 

    同时 
    grant execute on dbms_job to ...; 4、将要执行的任务,为存储过程等PL/SQL程序段 
    SQL> variable n number; 
    SQL> begin 
    2 dbms_job.submit(n, 'my_job', sysdate, 'sysdate + 1/360'); 
    3 commit; 
    4 end 
    5 / 
    SQL> print :n; 5、查看Job 
    Table :user_jobs、dba_jobs 
    Column:job (任务号) 
    next_date (下次执行日期) 
    next_sec (下次执行时间) 
    failures (失败次数,失败16次则自动终止) 
    broken (终止标志,Y/N)