DBMS_JOB.SUBMIT(:jobno,//job号
                'your_procedure;',//要执行的过程
                trunc(sysdate)+1/24,//下次执行时间
                'trunc(sysdate)+1/24+1'//每次间隔时间
               );
删除job:dbms_job.remove(jobno);
修改要执行的操作:job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
例子:
VARIABLE jobno number;
begin
      DBMS_JOB.SUBMIT(:jobno, 
              'Procdemo;',--此处为存储过程名称 
               SYSDATE, 'SYSDATE + 1/720');
         commit;
end;
/把操作写在存储过程(Procdemo)里面

解决方案 »

  1.   

    你可以用job来实现
    dbms_job.submit(jobno,proc,nexttime,intervaltime);
      

  2.   

    请教,我按照你的方法作了,有以下错误:
    VARIABLE jobno number;
    begin
    dbms_job.submit(:jobno,'refreshindex;',sysdate,'sysdate+1/24');
    commit;
    end;ERROR 位于第 1 行:
    ORA-06550: 第 1 行, 第 93 列:
    PLS-00905: 对象 SYSTEM.REFRESHINDEX 无效
    ORA-06550: 第 1 行, 第 93 列:
    PL/SQL: Statement ignored
    ORA-06512: 在"SYS.DBMS_JOB", line 79
    ORA-06512: 在"SYS.DBMS_JOB", line 131
    ORA-06512: 在line 2
      

  3.   

    refreshindex;这个是你定义的存储过程?try:
    alter procedure refreshindex compile;
      

  4.   

    你可以用job来实现,将要执行的sql语句放在存储过成立
    然后
    begin
      sys.dbms_job.submit(job,
    'begin
    存储过程
    end',
     to_date(起始时间, 'dd-mm-yyyy hh24:mi:ss'),
    时间间隔);
      commit;
    end;
      

  5.   

    楼上的各位老大说的没错,用DBMS_JOB包实现数据库后台进程
    1:建立实现任务的过程
       create or replace procedure pro_name as
       begin
         ......
       end;
    2:然后向任务队列中加入任务
       sql>variable jobno number;
       sql>begin
       sql>DBMS_JOB.submit(:jobno,'pro_name();',sysdate,'sysdate+1');
       sql>commit;
       sql>end;
    这个任务是每天执行一次,如果想每一分钟执行一次,将 sysdate+1 改为 sysdate+1/1440 
      

  6.   

    错误是这样的,我不知道为什么?
    SQL> VARIABLE jobno number;
    SQL> begin
      2  dbms_job.submit(:jobno,'testmis.testp();',sysdate,'sysdate+1/600');
      3  commit;
      4  end;
      5  /
    begin
    *
    ERROR 位于第 1 行:
    ORA-06550: 第 1 行, 第 93 列:
    PLS-00201: 必须说明标识符 'TESTMIS.TESTP'
    ORA-06550: 第 1 行, 第 93 列:
    PL/SQL: Statement ignored
    ORA-06512: 在"SYS.DBMS_JOB", line 79
    ORA-06512: 在"SYS.DBMS_JOB", line 131如果这样写就出现这样的错误:
    SQL> VARIABLE jobno number;
    SQL> begin
      2  dbms_job.submit(:jobno,'testp();',sysdate,'sysdate+1/600');
      3  commit;
      4  end;
      5  /
    begin
    *
    ERROR 位于第 1 行:
    ORA-06550: 第 1 行, 第 93 列:
    PLS-00905: 对象 SYSTEM.TESTP 无效
    ORA-06550: 第 1 行, 第 93 列:
    PL/SQL: Statement ignored
    ORA-06512: 在"SYS.DBMS_JOB", line 79
    ORA-06512: 在"SYS.DBMS_JOB", line 131
    ORA-06512: 在line 2
      

  7.   

    你创建testp这个存储过程了吗???