每月新增数据百万多条,需要定期处理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和存储过程相关推荐

  1. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  2. oracle exec编译失效,编译oracle失效的函数、存储过程、视图等

    进行oracle开发时常常为不时失效的存储过程,函数等苦恼,于是下决心解决这个问题,东查西找,找到一个好东东,在基础上又修改了一下,问题终于被我解决了. 1.建立一个存储过程 CREATE OR RE ...

  3. oracle 存储过程 db,oracle数据库的存储过程是什么?

    oracle数据库的存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即 ...

  4. oracle将存储过程导出,Oracle如何导出存储过程

    昨天使用exp可以导出oracle数据库表,今天说下怎么导出存储过程. 首先看下使用pl/sql怎么导出存储过程. 导出步骤: tools-->Export User Objects...--& ...

  5. oracle如何调试sql,调试oracle与调试sql server存储过程

    [IT168 技术]关于存储过程的调试,知道方法以后很简单,但在不知道的时候,为了测试一个存储过程的正性,print,插入临时表等可谓是使出了浑身解数,烦不胜烦.下面就把我工作中调试oracle存储过 ...

  6. oracle 存储过程误删,Oracle中怎么恢复被删掉的存储过程

    Oracle中如何恢复被删掉的存储过程? 在某些时候,容易误删存储过程,那么针对存储过程被删除了,我们如何进行恢复呢 ? 这里为大家进行讲解. 1.  创建测试存储过程 SQL> conn ro ...

  7. 使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码

    使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码 Oracle数据库系统自带的PL/SQL对象(包,存储过程,函数等)的代码绝大部分都是使用了wrap程序加 ...

  8. oracle的存储过程写法Oracle中如何写存储过程

    ​​Oracle的存储过程基本写法​​ Oracle存储过程简介: 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务 ...

  9. Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL

    Oracle 存储过程学习 目录 Oracle 存储过程........................................................................ ...

  10. oracle存储过程 论文,Oracle中基于Java的存储过程开发_计算机论文

    论文导读::存储过程是一种数据库对象,将执行计划存储在数据库的服务器中,它的执行速度比独立执行同样的程序要快.任何一个设计良好的数据库应用程序都应该用到存储过程.存储过程可以使得对数据库的管理.显示关 ...

最新文章

  1. 微信小程序与H5相互跳转和传递数据
  2. 修改grub2安装双系统的windows引导
  3. 摩托罗拉移动员裁员重点是研发
  4. html游戏代码_实现了代码自动生成,开发效率妥妥的提升,升职加薪跟上
  5. SQL注入1-5_cookie基于base64的注入
  6. ASP.NET+SQL创建存储过程
  7. python3怎么定义long_python3 整数类型PyLongObject 和PyObject源码分析
  8. 双调欧几里得旅行商问题_遗传模拟退火算法求解旅行商(TSP)问题MATLAB代码讲解...
  9. 用友v11服务器的共享文件,用友U8系列财务及供应链一体化操作手册u8V11.1(标准)版.docx...
  10. MSDTC不可用解决办法
  11. 对jeecg框架的认识
  12. 无线联网常见问题[1]-搜不到无线网络(请先耐心看完)
  13. 如何将图片批量转换成PDF?
  14. 程序员的奋斗史(三十一)——人在囧途之应聘篇(一)
  15. 知识表示的方法(1)——产生式表示法
  16. shell 字符串列表长度
  17. hibernate中lazy的使用
  18. 20189221 2018-2019-2 《密码与安全新技术专题》第二周作业
  19. springboot+Zuul网关服务
  20. questasim的傻瓜式安装与仿真教程

热门文章

  1. 前端学习(1437):vue一些链接
  2. 前端学习(94):css重置样式
  3. 第一百三十七期:一个简单的小案例带你理解MySQL中的事务
  4. 第九十六期:JavaScript 中的 4 个相等比较算法的介绍
  5. 第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!
  6. 第四十六期:关于云存储的五大优势
  7. 实例45:python
  8. 实例25:python
  9. Linux 给Qt应用软件创建图标启动
  10. 微信小程序API~GET