在Oracle定时任务中,一个JOB下可以有多个存储过程。那么这些存储过程是采用并行执行还是串行执行呢?

往下看:

--写一个最简单的例子
--创建表与存储过程,让存储过程循环插入1-10000
create or replace procedure A_TEST is
TJ_COUNT NUMBER :=0;

begin
   while TJ_COUNT < 100000 LOOP

   begin   

         TJ_COUNT:= TJ_COUNT + 1;
         insert into a_test_su(num) values (TJ_COUNT);
         commit;
   end;

   end LOOP;

end A_TEST;

 

再写一个存储来获取上面存储过程插入的数据

--创建表与存储过程
--获取上面表的数据的最大值或者是所有数据的和 create or replace procedure A_A is tj_count number:=0; begin select sum(num) into tj_count from a_test_su; dbms_output.put('tjsl:'); dbms_output.put_line(tj_count); insert into a_a_test(num) values (tj_count); commit; end A_A;

 

单独执行一下 procedure A_TEST,看看数据的和是多少

我上面的例子得出的值是:5000050000

那么,接下来创建job后执行看看数据是不是5000050000

--创建job,注意两个存储的先后循序
begin
  sys.dbms_job.submit(job => :job,
    what => 'A_TEST;A_A;',
    next_date => to_date('15-04-2020 15:02:22', 'dd-mm-yyyy hh24:mi:ss'),
    interval => 'sysdate+1');
  commit;
end;

执行job后查询表 a_a_test数据中两条数据一致,说明:

dbms_job下多个存储过程串行执行

posted on 2020-04-14 15:22  村头老树下听风  阅读(2486)  评论(0编辑  收藏  举报