各位大神,问个oracle中的关于job的问题项目中需要为其他系统提供数据,大概思路:使用JOB每天定时执行存储过程,从视图中读取数据写到中间表存储过程的执行语句如下(简化):
insert into test values('A',sysdate);-------------------1
commit;insert into T_XXX (A,B,C,D,GET_FLAG,ID) ----------------2
select A,B,C,D,'0',seq_XXX.nextval from V_XXX;
commit;insert into test values('B',sysdate);-------------------3
commit;
其中2是真正要写入的数据(执行时间不到2s),1和3是测试写入的数据,问题:
JOB自动执行是有跑起来的,但是没有跑完,一直fail
test表中只有 1 写入的数据,没有 3 的数据, 2 中也没有数据
手动执行存储过程就正常了,都有数据,sys.dbms_job.run也正常
为什么第2条insert语句在JOB自动执行中会不成功?使用了下面的方法也是出现一样的问题:1、不用视图,直接select table
2、JOB_QUEUE_PROCESSES值30,够用
3、JOB中不调存储过程,what直接写上面的insert语句
哪位高人来解答一下?
oraclejob

解决方案 »

  1.   

    简单的测试了一下,没有发现问create or replace procedure test_job
    as
    begin
    insert into test select 1,sysdate from dual;
    commit;
    insert into test1 select seq_1.nextval,'sych' from dual;
    commit;
    insert into test select 2,sysdate from dual;
    commit;
    end;begin
      sys.dbms_job.submit(job => :job,
                          what => 'test_job;',
                          next_date => to_date('01-01-4000', 'dd-mm-yyyy'),
                          interval => 'sysdate+1/24/60');
      commit;
    end;
    /
      

  2.   


    存储过程手动执行是正常的,在JOB中就不行了