我是新手,刚刚开始接触oracle,现在是什么都头脑.领导让我实现一个在晚上去执行一个存储过程或什么的处理白天大量数据业务的程序.由于对oracle一点都不熟,根据不知道从哪下手,请各位大侠帮忙.

解决方案 »

  1.   

    可以考虑三个方法:
    1、用oracle的job来完成
    2、写个批处理文件,用windows的计划任务实现
    3、oracle中建表,写过程,外部写程序调用(线程不断检查有没有要执行的任务)
      

  2.   

    补充楼上的:其实就是2种,一种是ORACLE内部的JOB,一种是通过外部检测来判断是否要执行这个过程。用JOB也是比较方便的,其实比在外部检测要简单点,例如:begin
      sys.dbms_job.submit(job => :job,
                          what => DoSomething;',
                          next_date => to_date('20-10-2005 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'trunc(SYSDATE + 1,''mi'')');
      commit;
    end;
    就是让在2005-10-20 01:00:00开始执行DoSomething过程,以后每隔1天做一次
      

  3.   

    先把处理白天大量数据业务的存储过程写好,然后建job。btw:qiaozhiwei(乔)升级了,祝贺祝贺。快发帖散分啊 :)
      

  4.   


                  一个简单例子: 创建测试表
    SQL> create table a(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 过程已成功完成。
    select job,to_char(next_date,'yyyy-mm-dd hh24:mi:ss') from all_jobs;
    ----------job的使用: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;',//Procdemo为过程名称 
                   SYSDATE, 'SYSDATE + 1/720');
             commit;
    end;-----修改job_queue_processes的值(保证其不为0否则JOB不自动运行)
    可通过select * from v$parameter;查看其值;
    方法1,startup pfile='C:\oracle\ora90\database\initorcl.ora';
    需要修改initorcl.ora文件的job_queue_processes参数,然后重新启动数据库以后才能生效
    方法2,alter system set job_queue_processes=10 
    不需要重新启动数据库就能生效,系统自动修改init.ora文件
      

  5.   

    谢谢各位.看来还得好好学学pl/sql了,基本已经知道是怎么个过程了,剩下就得自己努力去学写业务的语句了.结贴