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)'
oracle job 与存储过程,应用oracle job和存储过程相关推荐
- oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...
创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...
- oracle exec编译失效,编译oracle失效的函数、存储过程、视图等
进行oracle开发时常常为不时失效的存储过程,函数等苦恼,于是下决心解决这个问题,东查西找,找到一个好东东,在基础上又修改了一下,问题终于被我解决了. 1.建立一个存储过程 CREATE OR RE ...
- oracle 存储过程 db,oracle数据库的存储过程是什么?
oracle数据库的存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即 ...
- oracle将存储过程导出,Oracle如何导出存储过程
昨天使用exp可以导出oracle数据库表,今天说下怎么导出存储过程. 首先看下使用pl/sql怎么导出存储过程. 导出步骤: tools-->Export User Objects...--& ...
- oracle如何调试sql,调试oracle与调试sql server存储过程
[IT168 技术]关于存储过程的调试,知道方法以后很简单,但在不知道的时候,为了测试一个存储过程的正性,print,插入临时表等可谓是使出了浑身解数,烦不胜烦.下面就把我工作中调试oracle存储过 ...
- oracle 存储过程误删,Oracle中怎么恢复被删掉的存储过程
Oracle中如何恢复被删掉的存储过程? 在某些时候,容易误删存储过程,那么针对存储过程被删除了,我们如何进行恢复呢 ? 这里为大家进行讲解. 1. 创建测试存储过程 SQL> conn ro ...
- 使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码
使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码 Oracle数据库系统自带的PL/SQL对象(包,存储过程,函数等)的代码绝大部分都是使用了wrap程序加 ...
- oracle的存储过程写法Oracle中如何写存储过程
Oracle的存储过程基本写法 Oracle存储过程简介: 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务 ...
- Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL
Oracle 存储过程学习 目录 Oracle 存储过程........................................................................ ...
- oracle存储过程 论文,Oracle中基于Java的存储过程开发_计算机论文
论文导读::存储过程是一种数据库对象,将执行计划存储在数据库的服务器中,它的执行速度比独立执行同样的程序要快.任何一个设计良好的数据库应用程序都应该用到存储过程.存储过程可以使得对数据库的管理.显示关 ...
最新文章
- 微信小程序与H5相互跳转和传递数据
- 修改grub2安装双系统的windows引导
- 摩托罗拉移动员裁员重点是研发
- html游戏代码_实现了代码自动生成,开发效率妥妥的提升,升职加薪跟上
- SQL注入1-5_cookie基于base64的注入
- ASP.NET+SQL创建存储过程
- python3怎么定义long_python3 整数类型PyLongObject 和PyObject源码分析
- 双调欧几里得旅行商问题_遗传模拟退火算法求解旅行商(TSP)问题MATLAB代码讲解...
- 用友v11服务器的共享文件,用友U8系列财务及供应链一体化操作手册u8V11.1(标准)版.docx...
- MSDTC不可用解决办法
- 对jeecg框架的认识
- 无线联网常见问题[1]-搜不到无线网络(请先耐心看完)
- 如何将图片批量转换成PDF?
- 程序员的奋斗史(三十一)——人在囧途之应聘篇(一)
- 知识表示的方法(1)——产生式表示法
- shell 字符串列表长度
- hibernate中lazy的使用
- 20189221 2018-2019-2 《密码与安全新技术专题》第二周作业
- springboot+Zuul网关服务
- questasim的傻瓜式安装与仿真教程