求一段Oracle Job
 完成:每天00:00时,自动启动PL/SQL程序(例:名clear_data)并问:怎么看有关Job的工作情况?

解决方案 »

  1.   

    以上存储过程每月3号定期执行declare job1 number;
    begin
    --每月3号午夜12点执行MYPROC
    dbms_job.submit(job1,'MYPROC;',sysdate,'TRUNC(LAST_DAY(SYSDATE ) + 3)');
    commit;
    end;
    使用另外一个存储过程验证MYPROC是否执行PASUPPLYPROC.prccreate or replace procedure PASUPPLYPROC is
    isnull integer;
    tmp_str varchar2(100);
    begin
    --取得本月执行myproc次数
    if isnull is null then 
    select count(*) into isnull from oper_proc_log 
    where oper_date>=to_date(to_char(add_months(last_day(sysdate) +1,-1), 'yyyymmdd'),'yyyymmdd');
    end if;
    --无本月执行记录则立即执行myproc
    if isnull=0 then
    tmp_str:='begin myproc; end;';
    execute immediate tmp_str;
    commit; 
    end if;
    end PASUPPLYPROC;
      

  2.   

    可以先查看你的数据库版本:
    Select version FROM ProdUCt_component_version 
      Where SUBSTR(PRODUCT,1,6)='Oracle'; 
    如果是10以上可以到oem中直接查看和管理。比较方便。
    10g以下通过toad工具或pl/sql工具都可以查看或管理。
    你先说你用的是什么工具吧
      

  3.   

    每晚零点执行的job示例:DECLARE
      X NUMBER;
    BEGIN
      SYS.DBMS_JOB.SUBMIT
      ( job       => X 
       ,what      => 'declare
    i integer:=7;
    j integer:=0;
    v_url varchar(100):=null; 
    begin
    for i in 7..13 loop
    for j in 0..23 loop
    v_url := replace(to_char(trunc(sysdate),''yyyyMMdd'')||to_char(j,''00'')||''.wmv'','' '','''');
    insert into PUB_TVLISTENER (Listen_Date,Listen_Time,LISTEN_CHANNELID,Listen_url) values (to_date((to_char(trunc(sysdate),''yyyy-MM-dd'')),''yyyy-MM-dd''),j,i,v_url);
    end loop;
    end loop;
    commit;
    end;'
       ,next_date => to_date('21-01-2009 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;
    /
      

  4.   

    有这么复杂吗?我用的是Oracle 9ito watson110:
     你那两层循环是干吗的?