本帖最后由 wildwave 于 2014-08-12 14:19:46 编辑

解决方案 »

  1.   

    最简单的一个Oracle定时任务
    一、在PLSQL中创建表:
    create table HWQY.TEST
    (
    CARNO     VARCHAR2(30),
    CARINFOID NUMBER
    )二、在PLSQL中创建存储过程:
    create or replace PRocedure pro_test
    AS
    carinfo_id number;
    BEGIN
    select s_CarInfoID.nextval into carinfo_id
    from dual;
    insert into test(test.carno,test.carinfoid) values(carinfo_id,'123');
    commit;
    end pro_test;三、在SQL命令窗口中启动任务:
    在SQL>后执行:
    VARIABLE jobno number;
    begin
    DBMS_JOB.SUBMIT(:jobno,
        'pro_test;',
        SYSDATE,'sysdate+1/24/12');
        
        commit;
        end;
        /提交后提示:
    PL/SQL procedure successfully completed
    jobno
    ---------
    1四、跟踪任务的情况(查看任务队列):SQL> select job,next_date,next_sec,failures,broken from user_jobs;       JOB NEXT_DATE   NEXT_SEC           FAILURES BROKEN
    ---------- ----------- ---------------- ---------- ------
             1 2008-2-22 ?01:00:00                  0 N说明有一个任务存在了。
    执行select * from test t查看定时任务的结果。可以看出定时任务是正常执行了的。五、停止已经启动的定时任务:
    先执行select job,next_date,next_sec,failures,broken from user_jobs;
    以查看定时任务的job号。
    在SQL>中执行下面的语句停止一个已经启动的定时任务:
    begin
    dbms_job.remove(1);
    commit;
    end;
    /
    表示停止job为1的任务。
    执行后显示如下:
    PL/SQL procedure successfully completed六、查看进程数:
    show parameter job_queue_processes;
    必须>0,否则执行下面的命令修改:
    alter system set job_queue_processes=5;七、再创建一个任务(每5分钟执行一次):
    variable jobno number;begin
    dbms_job.submit(:jobno, 'pro_test;',
    sysdate,'sysdate+1/24/12');
    commit;
    end;
    /建立一个定时任务后,在PLSQL中查看JOB,它的sql语句类似的是如下:begin
    sys.dbms_job.submit(job => :jobno,
                          what => 'pro_test;',
                          next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1/24/12');
    commit;
    end;
    /所以,创建一个任务的完整的格式是:
    variable jobno number;
    begin
    sys.dbms_job.submit(job => :jobno,
                          what => 'pro_test;',
                          next_date => to_date('21-02-2008 17:37:26', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+1/24/12');
    commit;
    end;
    /
    --系统会自动分配一个任务号jobno。八、 执行select job,next_date,next_sec,failures,broken from user_jobs;
    结果:
       JOB NEXT_DATE NEXT_SEC FAILURES BROKEN
    1 1 2008-2-22 AM 01:00:00 01:00:00 0 N
    2 2 2008-2-21 PM 05:42:45 17:42:45 0 N
    3 3 2008-2-21 PM 05:42:45 17:42:45 0 N以上过程全部在Oracle817下通过测试。
      

  2.   

    给你个例子吧,这个是每天晚上12点执行VARIABLE jobno number;↙begin
    DBMS_JOB.SUBMIT(:jobno,
        '你的存储过程;',
        TRUNC(SYSDATE),'trunc(sysdate)+1');
        commit;
    end;
      

  3.   

    我执行variable jobno number;的时候提示无效。
    创建的PRO在侧边对象栏可以查到,但是有个红叉,在可是窗口添加JOB的时候提示PRO无效。。
      

  4.   

    我给的语句在sqlplus环境中执行,已测试,没问题
      

  5.   

    写一个procedure 存储过程,然后 在plsqldev里面 定时执行过程就好了。 job 内容为
    begin
    pro;
    end;
      

  6.   

    百度一下 oracle job ,2# 的方法就很详细;
      

  7.   

    总结一下我做的过程:创建存储过程,因为我用的是PLSQL,创建后在左边对象栏的目录里可以查看到,正常显示图标为绿色,我最开始做好有个红叉在上面,又来发现是单引号有误,全部改为双引号以后就正常了,过程编译完后在对象栏的jobs目录下新建job,会有可视化操作的界面,填入存储过程名和要定时的时间就OK了,不用写指令,很方便。
    多谢大家的指导
      

  8.   

    可以使用Oracle 中的job,做计划任务,
    新建job ,在图形化界面中填入调用的存储过程,已经间隔的时间,
    这里举个小例子