這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料
,而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別
是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間
utc時間是從2023年1月1號零時開始到現在的總秒數
declare
t number;
begin
t := (to_date('2004-10-12 00:00:00','yyyy-mm-dd hh24:mi:ss')-to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60*1000;
dbms_output.put_line(t);
end;
declare
t date;
begin
t := to_date('1970-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')+1097630923000/(24*60*60*1000);
dbms_output.put_line(to_char(t,'yyyy-mm-dd hh24:mi:ss'));
end;
但後來一想,那需要那麼麻煩啊,只要計算出一周的秒數,用最能近的utc時間減去7天的總秒數,和七天前的時間做比較就ok了
於是方法如下:
1. //建立儲存過程
create or replace procedure del_tab as
v_time number;
begin
select max(aa.utc) into v_time from tablename ; //tablename換成你的表名
execute immediate 'delete from tablename where tablename.utc variable job_id number; //定義任務id
3.//啟動任務(每天執行一次)
sql> begin
2 dbms_job.submit(:job_id,' trun_tab;',sysdate,'sysdate+1/24'); //這是每天執行,如果修改時間間隔可以修改「sysdate+1/144」
3 end;
4 /4. 你可以測試下
sql> select job,next_date,what from user_jobs; //用這個語句檢視任務id,然後執行下面的語句
這個是立刻執行的
sql> begin
2 dbms_job.run(2);
3 end;
4 /pl/sql 過程已成功完成。
然後在檢視表的內容 如果表的內容為空 ,證明已經刪除了
5. //刪除定時任務:
dbms_job.run(2)
oracle定時刪除表空間的資料並釋放表空間
這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料 而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別 是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間 utc時間是從1970年1月1號零時開始到現在的總秒數 declare...
oracle定時刪除表空間的資料並釋放表空間
這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料 而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別 是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間 utc時間是從1970年1月1號零時開始到現在的總秒數 declare...
oracle定時刪除表空間的資料並釋放表空間
這兩天我乙個朋友問我乙個問題,他想定期刪除乙個表裡資料,只保留最近乙個星期的資料 而且要考慮釋放磁碟空間,所以我幫他做了個定時任務。判斷時間是通過表裡的乙個列,型別 是資料型,是utc時間。剛開始還想把utc時間轉化成現在的時間 utc時間是從1970年1月1號零時開始到現在的總秒數 declare...