使用oracle job和存储进程环球 - 威尼斯人

使用oracle job和存储进程环球

2019-02-11 11:35:28 | 作者: 哲瀚 | 标签: 进程,数据,数据表 | 浏览: 3201

每月新增数据百万多条,需求定时处理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 ||to_date(to_char(add_months(last_day(sysdate) +1,-1), yyyy-mm-dd),yyyy-mm-dd)||;
execute immediate tmp_str;

创立(test_pd)前史表
tmp_str2:=create table ||TableName_PD|| as select * from test_pd where patroldate ||to_date(to_char(add_months(last_day(sysdate) +1,-1), yyyy-mm-dd),yyyy-mm-dd)||;
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 to_date(to_char(add_months(last_day(sysdate) +1,-1), yyyymmdd),yyyymmdd);
删去前史表本月记载
delete from test_pd where patroldate to_date(to_char(add_months(last_day(sysdate) +1,-1), yyyymmdd),yyyymmdd);

删去前史表本月记载
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;
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    转载 精妙SQL头条

    句子,数据库,运用
  • 2

    数据库管理工具alibaba

    数据库,运用,用户
  • 3

    mysql动态sql句子快报

    动态,句子,游标
  • 4

    使用oracle job和存储进程环球

    进程,数据,数据表
  • 5
  • 6

    数据库sina

    数据库,数据,功用
  • 7

    oracle rac 装置手册sina

    装置,节点,集群
  • 8