创建JOB
  每天晚上11点启动一次JOB,执行存储过程sp_job
Variable jobid number;
Begin
Sys.dbms_job.submit(:jobid,'sp_job;',trunc(sysdate+1)+11/24),
  'trunc(sysdate+1)+1/24')
Commit;
End;每天晚上不是trunc(sysdate)+11/24吗?为什么还要+1呢?~~~~高手帮忙解解疑惑~

解决方案 »

  1.   

    晚上11点是你说的这个trunc(sysdate)+11/24,但是trunc(sysdate+1)+1/24 代表是第二天凌晨1点钟!
      

  2.   

    晚上11点,就是trunc(sysdate)+11/24
      

  3.   

    其实代表了你这个job何时将被重执行,也就是第二天凌晨1点会重新执行。
      

  4.   

    关键点是要明白interval这个参数的作用,oracle在执行每次job前,都会取这个表达式计算下次job执行时间.
      

  5.   

    所以你的job会在第二天的中午11点第一次执行,在执行前计算interval,第二次执行将是后天的夜里1点.
      

  6.   

    --'trunc(sysdate+1)+23/24' 是下次执行的时间,所以要加1
    Variable jobid number;
    Begin
    Sys.dbms_job.submit(:jobid,'sp_job;',trunc(sysdate)+23/24),
      'trunc(sysdate+1)+23/24')
    Commit;
    End;
      

  7.   


    Variable jobid number;
    Begin
    Sys.dbms_job.submit(:jobid,'sp_job;',trunc(sysdate)+23/24),
      'trunc(sysdate)+1+23/24')
    Commit;
    End;
      

  8.   

    哦~O(∩_∩)O谢谢楼上的各位,明白了,但是,只用一个trunc(sysdate)+23/24不行吗?~~~这样也是每天11点执行,不用指定下次的执行时间,因为sysdate不是每天都变得嘛?~~~第二天的时候sysdate就自动变了嘛`
      

  9.   

    呵呵,这个过程的入参就是这么定的,必须输入一个下次运行时间next_date和一个计算表达式interval.按要求给定参数就可以了.