您的位置:首页 > 数据库 > Oracle

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

2013-11-11 11:27 736 查看
系统有要求定时修改大数据量的数据,而且对时间要求较高,最后决定使用数据库级的定时任务,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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: