我要按照时间调用一个存储过程,比如晚上12点,这个存储过程来实现在晚上12点时,把数据库中一个表的数据导入到另一个表,请问如何操作?

解决方案 »

  1.   

    使用job,定时启动执行该存储过程。
      

  2.   

    Oracle dbms_job package 用法小结
    http://blog.csdn.net/tianlesoftware/archive/2009/10/21/4703133.aspx
    ------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977
      

  3.   

    在COMMAND下修改下面代码后,运行:
    VARIABLE job1 NUMBER;
    begin
      sys.dbms_job.submit(job => :job1,
                          what => '过程名称;',
                          next_date => sysdate,
                          interval => 'trunc(sysdate) + 1');
      commit;
    end;
    /解释:
    job => :job1        代表其中job1是外部定义的参数,当创建JOB的时候,会返回一个数字,为JOB编号。
    what => '过程名称;'  写入过程名称,后面一定要带一个“分号”,否则创建时会报错。 
    next_date => sysdate 下次执行时间,这里可以使用当前时间为准,你可以自己修改。
    interval => 'trunc(sysdate) + 1'  代表从以当天开始林晨计算,向后推一天进行运行,运行完后再从当前开始计算,所以就是循环计算起来了。这个里面注意到一些有引号,一些没有,按照这个规则即可。有部分版本的ORACLE默认JOB的队列尚未启动,用DBA在命令行进入SQLPLUS后,查看JOB运行:
    show parameter job_queue_processes;
    若该值为0,则需要修改:
    alter system set job_queue_processes =10;根据实际情况修改为相应值即可。
    手工运行JOB为(当JOB被BROKEN后,手工运行一次,自动重启任务):
    begin
     dbms_job.run(JOB编号);--这个JOB编号以及下面的JOB编号,都是上面创建时得到的那个JOB的编号 
    END;暂停JOB(BROKEN)
    BEGIN
      sys.dbms_job.broken(job => JOB的编号,broken => TRUE);
      commit;
    end;
    暂停后重启JOB(BROKEN)
    BEGIN
      sys.dbms_job.broken(job => JOB的编号,broken => FALSE);
      commit;
    end;删除JOB:
    begin
      sys.dbms_job.remove(job => JOB的编号);
      commit;
    END;
      

  4.   

    先写一个插入表数据的存储过程,然后写个job,定时执行这个过程就行了,我QQ空间有个简单job的例子,QQ号597795325,有不明白的可以去参考一下