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;
一下是具体步骤
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;
相关文章推荐
- Oracle中TO_DATE格式
- Oracle12cR1 DataGuard的主备切换
- 敏捷的Oracle 10g MAA配置方法
- Oracle 系统包
- 一个引号引起的血案,ORACLE SQL 分页语句的错误
- 10g MAA环境下面,主库更换 undo tablespace后,logical备库故障
- Oracle 10g maa 逻辑standby由于找不到回收站对象,而使得apply中断
- Oracle基础知识(八) - 触发器的分类:系统触发器
- 配置了逻辑standby之后,应避免在主库上做的操作
- Oracle11gR2创建虚拟专用恢复目录
- Oracle基础中的基础视频讲座录像(西安)供免费下载
- oracle存储过程创建表分区实例
- oracle在solaris下开机启动脚本
- Oracle执行SQL语句的过程
- Oracle技术之日期数据类型
- Oracle 跟踪文件和文件转储
- Oracle数据库date类型
- oracle数据库(表空间、用户权限)
- Oracle Commit
- Oracle前滚和回滚