oracle的job没有自动执行

今天写了一个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.集团编号=团购优惠信息.集团编号);
commit;
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)');
commit;
end;
/
到此完成!
备注:其实我是用【PLSQL Developer】工具创建的job,而且是每分钟执行一次job。
后来发现问题,该job竟然不执行,在上网查找资料后,我的解决方法是用sys账户以sysdba权限登录执行了以下一条语句
ALTER SYSTEM SET job_queue_processes = 20; 
commit;
问题解决,原来job_queue_processes 原来是0,在9i中,job_queue_processes默认是0,job将不能启动。所以要将其设置为大于1的整数。此参数还有另外一层意思,就是并行执行的job的个数,如果此参数设置是10,那么可以同时运行的job个数的上限就是10,假如此时你已经创建了10个job,并全都开始执行,当再创建新job的时候(且当前时间已经满足可以运行此job的时间了),那么这个job将会排队。
提示:使用
show  parameter  job_queue_process
可以查询job_queue_processes的值,但要以sysdba的权限登录且在Command Window窗口中运行,在SQL Window中运行该语句会提示语法错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值