当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle认证综合辅导:oracle的job没有自动执行
发布时间:2012/9/29 13:30:09 来源:城市网学院 编辑:admin
   写了一个oracle定时,发现无法运行。
    第一步写存储过程代码:
    create or replace procedure prc_update_tgyhxx as
    begin
    insert into 团购优惠信息(集团编号) select s.集团编号 from 团购优惠信息2 s where s.集团编号 not in(select 集团编号 from 团购优惠信息);
    update 团购优惠信息 set(上月用户数,本月新增数,月末用户数,调整折扣,用户手机号码)=(select  ac.用户数1 上月用户数,ac.净增数 本月新增数,ac.净增数+ac.用户数1 月末用户数,case when ac.净增数+ac.用户数1<60 then 90 when ac.净增数+ac.用户数1>60 and ac.净增数+ac.用户数1<70 then 80 when ac.净增数+ac.用户数1>70 and ac.净增数+ac.用户数1<80 then 70 when ac.净增数+ac.用户数1>80 then 60 end 调整折扣,ac.用户手机号码 from (select aaa.集团编号 集团编号1,aaa.用户手机号码,aaa.用户数 用户数1,bbb.集团编号,bbb.净增数,bbb.用户数 from 团购优惠信息1 aaa left join 团购优惠信息2 bbb on bbb.集团编号=aaa.集团编号) ac where ac.集团编号=团购优惠信息。集团编号);
    #mit;
    end;
    备注:其实就是执行两条sql语句,一条为insert,一条为update
    第二步就是创建job,代码如下:
    begin
    sys.dbms_job.submit(job => :job,
    what => 'prc_update_tgyhxx;',
    next_date => to_date(‘04-11-2010 16:14:00', 'dd-mm-yyyy hh24:mi:ss’),
    interval => 'TRUNC(sysdate,''mi'‘) + 1/ (24*60)’);
    #mit;
    end;
    /
    到此完成!
    备注:其实我是用【PLSQL Developer】工具创建的job,而且是每分钟执行一次job。
    后来发现问题,该job竟然不执行,在上网查找资料后,我的解决方法是用sys账户以sysdba权限登录执行了以下一条语句
    ALTER SYSTEM SET job_queue_processes = 20;
    #mit;
    问题解决,原来job_queue_processes 原来是0,在9i中,job_queue_processes默认是0,job将不能启动。所以要将其设置为大于1的整数。此参数还有另外一层意思,就是并行执行的job的个数,如果此参数设置是10,那么可以同时运行的job个数的上限就是10,假如此时你已经创建了10个job,并全都开始执行,当再创建新job的时候(且当前时间已经满足可以运行此job的时间了),那么这个job将会排队。
    提示:使用sql=“show  parameter  job_queue_process”可以查询job_queue_processes的值,但要以sysdba的权限登录。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved