--建立儲存過程,檢查表存不存在,存在就drop掉。 個人認為drop沒有mysql方便
create or replace procedure tableexistthendrop(tablename in varchar2) authid current_user
astempsql varchar2(2000);
vflag integer;
begin
vflag:=0;
tempsql:='select count(*) from user_tables where table_name = '''||upper(tablename)||'''';
execute immediate tempsql into vflag;
if vflag = 1 then
tempsql:='drop table '||upper(tablename);
execute immediate tempsql;
end if;
end;
/--建立儲存過程刪除某個表中某一天之前的資料
create or replace procedure proce_delvertable authid current_user
astempsql varchar2(3000);
temp_date varchar2(20);
begin
temp_date:=to_char(sysdate,'yyyy-mm-dd');
tableexistthendrop('user_bak');
tempsql:='create table user_bak nologging as select * from user';
execute immediate tempsql;
tempsql:='truncate table user';
execute immediate tempsql;
tempsql:='insert into user select * from user_bak where dctime >='''||temp_date||' 00:00:00''';
execute immediate tempsql;
commit;
end;
/--使用者授權,如果不授權,ddl語句在job中執行不了
grant create table,create sequence, create trigger,
create procedure, drop any sequence, create public synonym,
drop public synonym to scott;
--建立job,每週一早上8點執行
declare
job number;
begin
sys.dbms_job.submit(job => job,
what => 'proce_delvertable;',
next_date => trunc(next_day(sysdate,'星期一'))+8/24,
interval => 'trunc(next_day(sysdate,''星期一''))+8/24');
commit;
dbms_job.run(job);
end;
tips:在這個方案中,使用的是create table as select 的方式進行備份的,如果原表資料量大建議用此備份,因為如果直接delete原表,可能會造成鎖表導致正常業務阻塞,而且這種方式的速度遠比delete快。
centos定時器 crond(定時清理快取例項)
43 21 每天的21 43 執行 15 05 每天的05 15 執行 0 17 每天的17 00 執行 0 17 1 每週一的 17 00 執行 0,10 17 0,2,3 每週日,周二,週三的 17 00和 17 10 執行 0 10 17 1 毎月1日從 17 00到7 10 毎隔1分鐘 執行...
mysql定時器定時清理表資料
1.首先先檢視mysql是否開啟定時任務開關 2.value為on則已開啟,off則關閉 如果是off,就先開啟 set global event scheduler on 3.然後建立我們想要的定時器 delimiter drop event if exists deletelog create ...
ORACLE的定時器
建立日誌資訊表 測試表 create table t log id number,datetime date 插入測試資料 insert into t log values 1,25 5月 2006 檢視日誌資訊 select from t log 建立刪除日誌資訊的儲存過程 create or r...