oracle job 与存储过程,应用oracle job和存储过程

每月新增数据百万多条,需要定期处理2个主要数据表(test_ad,test_pd),移动非当月数据到历史表中保存

数据操作存储过程如下:

MYPROC.prc

create or replace procedure MYPROC is

TableName_AD char(13);

TableName_PD char(13);

tmp_str varchar2(100);

tmp_str2 varchar2(100);

tmp_str3 varchar2(100);

tmp_str4 varchar2(100);

tmp_str5 varchar2(100);

tmp_str6 varchar2(100);

tmp_str7 varchar2(100);

tmp_str8 varchar2(100);

begin

--临时表名赋值

if TableName_AD is null then

select 'PA_AD_'||to_char(add_months(sysdate,-1),'yyyymm') into TableName_AD from dual;

end if;

if TableName_PD is null then

select 'PA_PD_'||to_char(add_months(sysdate,-1),'yyyymm') into TableName_PD from dual;

end if;

--创建(test_ad)历史表

tmp_str:='create table '||TableName_AD||' as select * from test_ad where patroldate

execute immediate tmp_str;

--创建(test_pd)历史表

tmp_str2:='create table '||TableName_PD||' as select * from test_pd where patroldate

execute immediate tmp_str2;

--commit;

--创建本月数据临时表

tmp_str3:='create table temp_ad as select * from test_ad Where patroldate > ='''||to_date(to_char(add_months(last_day(sysdate) +1,-1), 'yyyymmdd'),'yyyymmdd')||'''';

execute immediate tmp_str3;

tmp_str4:='create table temp_pd as select * from test_pd Where patroldate > ='''||to_date(to_char(add_months(last_day(sysdate) +1,-1), 'yyyymmdd'),'yyyymmdd')||'''';

execute immediate tmp_str4;

--删除本月数据表(test_ad,test_pd)

tmp_str5:='drop TABLE test_ad';

execute immediate tmp_str5;

tmp_str6:='drop TABLE test_pd';

execute immediate tmp_str6;

--本月数据临时表重命名表(test_ad,test_pd)

tmp_str7:='rename temp_ad to test_ad';

tmp_str8:='rename temp_pd to test_pd';

execute immediate tmp_str7;

execute immediate tmp_str8;

/*--删除主数据表上非本月记录

delete from test_ad where patroldate

--删除历史表本月记录

delete from test_pd where patroldate

--删除历史表本月记录

tmp_str2:='delete from '||tmp_TableName||' where patroldate>='||to_date(to_char(add_months(last_day(sysdate) +1,-1),'yyyymmdd'),'yyyymmdd');

execute immediate tmp_str2;

*/

--插入操作记录

insert into oper_proc_log values(sysdate,'pc',0);

commit;

end MYPROC;

--=============注意!在存储过程中使用CREATE或DROP需要显示授权==========

--grant create table to user,grant drop any table to user

/

注:上面有一段被注释的内容,是最初的方案,但是后来了解到:删除大量数据,oracle并不释放空间!所以用了现在的方案,复制创建表——>删除表——>重命名。

以上存储过程每月3号定期执行

declare job1 number;

begin

--每月3号午夜12点执行MYPROC

dbms_job.submit(job1,'MYPROC;',sysdate,'TRUNC(LAST_DAY(SYSDATE ) + 3)');

commit;

end;

为了补救意外导致3号午夜12点没有执行MYPROC

使用另外一个存储过程验证MYPROC是否执行

PASUPPLYPROC.prc

create or replace procedure PASUPPLYPROC is

isnull integer;

tmp_str varchar2(100);

begin

--取得本月执行myproc次数

if isnull is null then

select count(*) into isnull from oper_proc_log

where oper_date>=to_date(to_char(add_months(last_day(sysdate) +1,-1), 'yyyymmdd'),'yyyymmdd');

end if;

--无本月执行记录则立即执行myproc

if isnull=0 then

tmp_str:='begin myproc; end;';

execute immediate tmp_str;

commit;

end if;

end PASUPPLYPROC;

--=============注意!在存储过程中使用CREATE或DROP需要显示授权==========

--grant create table to user,grant drop table to user

/

第二个job定期执行PASUPPLYPROC验证

declare job1 number;

begin

--每月15号午夜12点10分执行PASUPPLYPROC

dbms_job.submit(job1,'PASUPPLYPROC;',sysdate,'TRUNC(LAST_DAY(SYSDATE) + 14) +(24*60+10)/(24*60)');

commit;

end;

DBA_JOBS

===========================================

字段(列)          类型                 描述

JOB                NUMBER          任务的唯一标示号

LOG_USER           VARCHAR2(30)    提交任务的用户

PRIV_USER          VARCHAR2(30)    赋予任务权限的用户

SCHEMA_USER        VARCHAR2(30)    对任务作语法分析的用户模式

LAST_DATE          DATE            最后一次成功运行任务的时间

LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小时,分钟和秒

THIS_DATE     DATE            正在运行任务的开始时间,如果没有运行任务则为null

THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小时,分钟和秒

NEXT_DATE          DATE            下一次定时运行任务的时间

NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小时,分钟和秒

TOTAL_TIME         NUMBER          该任务运行所需要的总时间,单位为秒

BROKEN             VARCHAR2(1)     标志参数,Y标示任务中断,以后不会运行

INTERVAL           VARCHAR2(200)   用于计算下一运行时间的表达式

FAILURES    NUMBER     任务运行连续没有成功的次数

WHAT               VARCHAR2(2000) 执行任务的PL/SQL块

CURRENT_SESSION_LABEL RAW          MLSLABEL 该任务的信任Oracle会话符

CLEARANCE_HI      RAW MLSLABEL     该任务可信任的Oracle最大间隙

CLEARANCE_LO      RAW              MLSLABEL 该任务可信任的Oracle最小间隙

NLS_ENV           VARCHAR2(2000)   任务运行的NLS会话设置

MISC_ENV          RAW(32)          任务运行的其他一些会话参数

描述                    INTERVAL参数值 每天午夜12点            'TRUNC(SYSDATE + 1)' 每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)' 每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle从小白到大牛的刷题之路(建议收藏学习)

目录 前言 数据表结构 数据库文件(按照顺序导入) 1基本SQL-SELECT 1.1基本SQL-SELECT语句笔记 1.2 基本SQL-SELECT语句练习 2过滤和排序数据 2.1过滤和排序数据笔记 2.2过滤和排序数据练习 3单行函数 3.1单行函数笔记 3.2单行函数练习 4多表…

oracle数据库快照打点,Oracle数据库快照的使用

Oracle数据库快照的使用正在看的ORACLE教程是:Oracle数据库快照的使用。oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。正因为快照是一个主表的查询子集,使用快照可以加快数据的查询速度;在保持不同数据…

3.2 双向链表

1.简介 前面3.1的单链表在操作过程中有一个缺点,就是后面的节点无法直接找到前面的节点,这使很多操作都得从头到尾去搜寻节点,算法效率变得非常低,解决这个问题的方法就是重新定义链表的节点使每个节点有两个指针,一个…

uc通讯不成功php版本过高,Ucenter通信失败排查方法

定位错误来源:1. 使用firebug或类似于firebug的工具审查”通信失败“这几个字2. 会发现包含这几个字的div的同级下方有个script标签,复制该script标签的src值到浏览器的新标签页并打开3. 这个url指向的是ucenter中app模块的onping操作(ucenter/control/a…

马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别

马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别 http://martinfowler.com/articles/injection.html 中文翻译:http://files.cnblogs.com/files/stono/DependencyInjection.pdf 转载于:https://www.cnblogs.com/stono/p/4764551.html

oracle工作流错误,工作流错误处理 - Oracle® ZFS Storage Appliance 客户服务手册

工作流错误处理如果在执行工作流期间发生错误,则会引发异常。如果异常未由工作流自身所捕获(或者如果工作流引发的异常未以其他方式捕获),则工作流将失败,并向用户显示有关异常的信息。要正确处理错误,应该捕获并处理异常。例如&a…

敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则

第12章 ISP:接口隔离原则 不应该强迫客户程序依赖并未使用的方法。   这个原则用来处理“胖”接口所存在的缺点。如果类的接口不是内敛的,就表示该类具有“胖”接口。换句话说,类的“胖”接口可以分解成多组方法。每一组方法都服务于一组不…

pxe安装linux后命令不可用,pxe自动安装linux

配置自动安装操作系统1.网卡应支持pxe技术,由网卡作为dhcp的客户端向dhcp服务器请求一个IP地址,dhcp会将ip,网关等信息和的tftp服务器的地址应加载的文件名提供给客户端2.根据dhcp服务器提供的信息网卡上内置的tftp客户端向tftp服务器发出请求…

Java中常用的集合

有序列允许元素重复否Collection否是List是是SetAbstractSet否      否HashSetTreeSet是(用二叉树排序)MapAbstractMap否 使用key-value来映射和存储数据, Key必须惟一,value可以重复 HashMapTreeMap是(用二叉树…

linux文件系统的设计,基于Linux的文件系统设计.doc

PAGEPAGE 33无敌操作系统课程设计说 明 书?学 院、系:软件学院专 业:软件工程学 生 姓 名:学 号:设 计 题 目:基于Linux的模拟文件系统的设计与实现起 迄 日 期:指 导 教 师:?PAGEPAGE 33PAGE \* MERGEFORMATPAGE \*…

ASP.NET MVC必知必会知识点总结(二)

一、实现Controller的依赖注入: 1.自定义继承DefaultControllerFactory 类的控制器工厂类并重写GetControllerInstance方法;(如:InjectControllerFactory) 2.在Global.asax文件中的Application_Start方法中注册该控制器…

linux客户端无法绑定端口号,为什么Linux客户端的情况下不支持端口共用?

也不是不可以, 如果是socket的话只要设置端口复用就可以实现,随便写一段代码演示一下#/bin/pythonimport sysimport timeimport socketdef start_tcp_client(ip, port):#server port and ipserver_ip ipservr_port porttcp_client socket.socket(socket.AF_INET,…

如何提取pdf中的文字图片转为word文档

大家都知道图片形式的PDF文件中的文字是无法直接复制的,可是很多时候我们必须得将PDF里面的文本转成Word文档格式,如何才能实现呢?其实不难,首先你要保证PDF里面的图片文字足够清晰,然后利用专业的PDF文件转换工具即可。什么是PD…