一.建储存过程 
create or replace procedure rgl_b_rjl_proc 
    is 
begin        insert into rgl_b_rjl(bh,userid,xmh,dx) 
  select rgl_create_bh('1'),userid,xmh,dx 
    from rgl_b_rjh a 
    where 1=1      
      commit; 
end; 
二.建作业 
begin 
  sys.dbms_job.submit(job => :job, 
                      what => 'rgl_b_rjl_proc;', 
                      next_date => to_date('18-09-2008 10:06:41', 'dd-mm-yyyy hh24:mi:ss'), 
                      interval => 'sysdate+1/1440'); 
  commit; 
end; 
三.运行job 
begin 
dbms_job.run(7);//job 是7 
end; 
手动运行 dbms_job.run(7) 是可以往表里插入一条数据的。 
可它为什么不是每隔1分钟自动执行呢? 
要让job自动运行,是不是还要设置哪个地方的? 
问题解决就结贴

解决方案 »

  1.   

    在上面这段代码完成后要COMMIT一下,这个JOB才会运行。
      

  2.   

    1、将后台JQC01进程重启试一试;
       alter system set job_queue_process=0 scope=both;
      然后再: alter system set job_queue_process=10 scope=both;就会重起一个JQ后台进程2、如果是Linux下,检查系统运行时间是不是达到一个限制值(据说是跑很长时间后,时间计算溢出),
       需重起系统来解决。3、另外一种可能是,有一个后台作业在处理在吊死状态,那么需要优化,或者取消。几种情况,我都遇到过了。尤其是第三种最诡异,已经将那个后台作业offline了,还是发现是不断的在执行。
      

  3.   

    job是每分重执行一次的
    自己解决了,其实只要启动
    OracleServiceORCL 
    就可以了
    解决方法:
    1.确保 job 是没问题的,而且是每分重插入一条数据
    begin 
    dbms_job.run(1); 
    commit; 
    end; 
    是可以插入数据
    2.重新启动 OracleServiceORCL ,OracleOraHome90TNSListener 
    3.登陆 sql\plus 
    4.ALTER SYSTEM SET job_queue_processes = 20;
    commit;
    5.这样就ok