oracle创建定时job,job调用存储过程,批量查询,批量修改,自定义数据类型,

系统有要求定时修改大数据量的数据,而且对时间要求较高,最后决定使用数据库级的定时任务,job调用存储过程的方式实现

一下是具体步骤

1、一下是创建存储的sql、

--创建存储过程
create or replace procedure UPD_SAMPLE_CNT_BY_DONOR is
  --复合数据类型下记录型的创建
  --语法:TYPE 记录类型名 IS RECORD (分量列表 ),至于复合类型,推荐:http://blog.163.com/idea_/blog/static/180970262201181635319104/
  type DONOR_ROW_TYPE IS RECORD(
    DONOR_ID VARCHAR2(50),
    CNT      number);
  --创建DONOR_ROW_TYPE类型的数组
  TYPE DONOR_TBL_TYPE IS TABLE OF DONOR_ROW_TYPE INDEX BY BINARY_INTEGER;--(INDEX BY BINARY_INTEGER:下标自增长)
  --定义数据变量
  V_DONOR_TBL_TYPE DONOR_TBL_TYPE;


begin


  select DONOR.D0010 AS DONOR_ID, count(SAMPLET.D0010) AS CNT BULK COLLECT
    INTO V_DONOR_TBL_TYPE--(BULK COLLECT INTO 变量名:把查询的结果批量存入数组变量)
    from BIO.T00610 donor
    left join BIO.T00900 SAMPLET
      ON SAMPLET.D0260 = DONOR.D0010
     and SAMPLET.D0260 is not null
   where
   SAMPLET.Z0070 = 0
   group by DONOR.D0010
   order by DONOR.D0010;


   --循环   批量修改
  FORALL i IN 1 .. V_DONOR_TBL_TYPE.COUNT
    UPDATE BIO.T00610
       SET F0010 = V_DONOR_TBL_TYPE(i).CNT
     WHERE D0010 = V_DONOR_TBL_TYPE(i).DONOR_ID;


  COMMIT;
end;


2、一下是创建job的sql

--创建job
declare sampleJob number;
begin
  dbms_job.submit(sampleJob,
                'UPD_SAMPLE_CNT_BY_DONOR;',--UPD_SAMPLE_CNT_BY_DONOR:  调用的存储过程
                sysdate, 'SYSDATE + 10/(60*24*60)');--sysdate :开始执行时间,此处省略下一次执行时间,SYSDATE + 10/(60*24*60):执行周期
  commit;
end;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值