要求:
   每天凌晨2:00执行某个存储过程.
   

解决方案 »

  1.   

    先定义一个job,假如你的存储过程名是proc_1VARIABLE jobno1 NUMBER;
    BEGIN
      DBMS_JOB.SUBMIT(:jobno1,'proc_1;',TRUNC(TO_DATE('2010-07-02 02:00:00','yyyy-mm-dd hh:mi:ss'),'DD'),'TRUNC(SYSDATE+1,''DD'')');
    END;最后运行该作业:BEGIN
      DBMS_JOB.RUN(:jobno1);
    END;
      

  2.   

    一个简单例子:  创建测试表 
    SQL> create table t(a date); 表已创建。 创建一个自定义过程 
    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; 时间 
    ------------------- 
    2001/01/07 23:51:21 
    2001/01/07 23:52:22 
    2001/01/07 23:53:24 删除JOB 
    SQL> begin 
      2  dbms_job.remove(:job1); 
      3  end; 
      4  / PL/SQL 过程已成功完成。
      

  3.   

    如果你有工具的话(p/lsql deveper,toad),就更easy了,都不需要了解建job的语法,可视的建,呵呵
      

  4.   

    begin
      sys.dbms_job.submit(job => :job,
                          what => 'test(你要执行的过程名称);',
                          next_date => to_date('03-07-2010 02:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1' + 2 / 24);
      commit;
    end;
    /
      

  5.   

    示例create or replace procedure xiuwu as
        begin 
           delete from MORECORD where mobile = '10659089206888888';
        end;
    variable job20100706 number;
       begin
          dbms_job.submit(:job20100706,'xiuwu;',sysdate,'TRUNC(SYSDATE + 1) + 12/24');
       end;
        
        
        begin
         dbms_job.run(:job20100706);
        END;
      

  6.   

    select * from user_jobs看看表中你的job是否执行了。如果执行,执行情况怎么样?
      

  7.   

    begin
      sys.dbms_job.submit(job => :job,
                          what => 'declare
    v_process_flag integer(10);
    v_message varchar(200);
    begin
    smop_stat_cdr_p(v_process_flag,v_message);
    end;',
                          next_date => to_date('09-07-2010 02:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'trunc(sysdate)+2/24+1');
      commit;
    end;这里有个现成的。
      

  8.   

    job         回复内容    
      

  9.   

    没有找到原因 最后还是用 PL/SQL 搞好的 
      

  10.   

    DOS执行AT命令at 2:00 SQLPLUS USERNAME/PASSWORD@SID @FILENAME.sql