如果 ,我想要执行 proc_deletePerson()存储过程
我想在今天(2011-03-11的晚上) 23点执行一次,然后在12点、明天 的1 点、2点,即每隔一小时再执行一次
怎么写啊,急死我了

解决方案 »

  1.   

    1、把init <sid> .ora中如下两个参数打开
      JOB_QUEUE_INTERVAL=60
      JOB_QUEUE_PROCESSES=4 
    2.
    declare
    jobno   number;
    begin
    dbms_job.submit(jobno, 'sp_countofmonth; ',sysdate, 'sysdate+1/1440 ');
    commit;
    dbms_job.run(jobno);
    commit;
    end;
      

  2.   

    具体的
    创建一个自定义过程
    SQL>   create   or   replace   procedure   test   as
        2     begin
        3     insert   into   a   values(sysdate);
        4     end;
        5     /过程已创建。创建JOB
    SQL>   variable   job1   number;
    SQL>  
    SQL>   begin
        2     dbms_job.submit(:job1, 'test; ',sysdate, 'sysdate+1/1440 ');  --每天1440分钟,即一分钟运行test过程一次
        3     end;
        4     /PL/SQL   过程已成功完成。运行JOB
    SQL>   begin
        2     dbms_job.run(:job1);
        3     end;
        4     /PL/SQL   过程已成功完成。SQL>   select   to_char(a, 'yyyy/mm/dd   hh24:mi:ss ')   时间   from   a;
      

  3.   

    写一个存储过程,判断sysdate,当sysdate等于23点,12点,明天的上午1/2点,等于这个时间点的,就去执行这个存储过程
      

  4.   

    上面是通过JOB的方式,也可以考虑放到系统里,用计划任务的方式。
    例如,Linux    crontab  + shell
          Windows  计划任务 + bat
      

  5.   

    值得注意的是Oracle有的时候并不去执行你的Job,甚至不报错!这和Oracle的设置有关系,但作为开发者不愿意去设置这些,唯恐数据库服务器瘫掉!最好我们用系统自带的计划任务来完成这样的工作,无非是写一个winform程序!