好像不能重复调用??一次就没 有,我要每隔一段时间就运行一次.现在不知道怎样写那个JOB,有无例子??

解决方案 »

  1.   

    初始化相关参数job_queue_processes 
      alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位
      job_queue_process 表示oracle能够并发的job的数量,可以通过语句
      show parameter job_queue_process;
      来查看oracle中job_queue_process的值。当job_queue_process值为0时表示全部停止oracle的job,可以通过语句
      ALTER SYSTEM SET job_queue_processes = 10;
      来调整启动oracle的job。
      相关视图:
      dba_jobs
      all_jobs
      user_jobs
      dba_jobs_running 包含正在运行job相关信息
      -------------------------
      提交job语法:
      begin
      sys.dbms_job.submit(job => :job,
       what => 'P_CLEAR_PACKBAL;',
       next_date => to_date('04-08-2008 05:44:09', 'dd-mm-yyyy hh24:mi:ss'),
       interval => 'sysdate+ 1/360');
      commit;
      end;
      /
      -------------------------
      创建JOB
      variable jobno number;
      begin
      dbms_job.submit(:jobno, 'P_CRED_PLAN;',SYSDATE,'SYSDATE+1/2880',TRUE);
      commit;
      运行JOB
      SQL> begin
       dbms_job.run(:job1);
       end;
       /
      删除JOB
      SQL> begin
       dbms_job.remove(:job1);
       end;
       /
      DBA_JOBS
      ===========================================
      字段(列) 类型 描述
      JOB NUMBER 任务的唯一标示号
      LOG_USER VARCHAR2(30) 提交任务的用户
      PRIV_USER VARCHAR2(30) 赋予任务权限的用户
      SCHEMA_USER VARCHAR2(30) 对任务作语法分析的用户模式
      LAST_DATE DATE 最后一次成功运行任务的时间
      LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小时,分钟和秒
      THIS_DATE DATE 正在运行任务的开始时间,如果没有运行任务则为null
      THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒
      NEXT_DATE DATE 下一次定时运行任务的时间
      NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小时,分钟和秒
      TOTAL_TIME NUMBER 该任务运行所需要的总时间,单位为秒
      BROKEN VARCHAR2(1) 标志参数,Y标示任务中断,以后不会运行
      INTERVAL VARCHAR2(200) 用于计算下一运行时间的表达式
      FAILURES NUMBER 任务运行连续没有成功的次数
      WHAT VARCHAR2(2000) 执行任务的PL/SQL块
      CURRENT_SESSION_LABEL RAW MLSLABEL 该任务的信任Oracle会话符
      CLEARANCE_HI RAW MLSLABEL 该任务可信任的Oracle最大间隙
      CLEARANCE_LO RAW MLSLABEL 该任务可信任的Oracle最小间隙
      NLS_ENV VARCHAR2(2000) 任务运行的NLS会话设置
      MISC_ENV RAW(32) 任务运行的其他一些会话参数
      --------------------------
      描述 INTERVAL参数值
      每天午夜12点 'TRUNC(SYSDATE + 1)'
      每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
      每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
      每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
      每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
      每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
      --------------------------
      1:每分钟执行
      Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
      2:每天定时执行
      例如:每天的凌晨1点执行
      Interval => TRUNC(sysdate) + 1 +1/ (24)
      3:每周定时执行
      例如:每周一凌晨1点执行
      Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
      4:每月定时执行
      例如:每月1日凌晨1点执行
      Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
      5:每季度定时执行
      例如每季度的第一天凌晨1点执行
      Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
      6:每半年定时执行
      例如:每年7月1日和1月1日凌晨1点
      Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
      7:每年定时执行
      例如:每年1月1日凌晨1点执行
      Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24
    实际应用:
    Shlhdb中
    --以下脚本运行方式 放文件在c盘根目录
    --cmd
    --sqlplus shlhdb/shlhdb
    --@c:\pz_ztt.txt
    create or replace procedure pro_pz_ztt
    is
    --v number;
    begin
    insert into pz_ztt
    select tcm,to_char(sysdate,'yyyy')-1 nf,ztm,pic
    from pz_ztt where nf=(select max(to_number(nf)) from pz_ztt) and nf!=(select to_char(
    sysdate,'yyyy')-1 from dual);
    commit;
    end pro_pz_ztt;
    /
    variable job number;
    begin
      sys.dbms_job.submit(job => :job,
                          what => 'pro_pz_ztt;',
                          next_date => sysdate,
                          interval => 'ADD_MONTHS(trunc(sysdate,''yyyy''),12)+1/24');
      commit;
    end;
    /
    begin
    dbms_job.run(:job);
    end;
    /
      

  2.   

    DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X 
       ,what      => 'ProcAutoPutIntoDate;'
       ,next_date => to_date('05-06-2010 00:00:00','dd/mm/yyyy hh24:mi:ss')
       ,interval  => 'TRUNC(SYSDATE+1)'
       ,no_parse  => FALSE
      );
      SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    COMMIT;
    END;
    /