簡體   English   中英

棘手的plsql程序刪除數據

[英]tricky plsql procedure to delete data

朋友和pl / sql專家...

我正在嘗試創建從審計表中刪除數據的過程,但是不知道從哪里開始。

如果有人可以提供一些提示或指示,那將是很棒的...

要求:

  1. 該過程將在每月的第一個星期六運行(不確定是否可以通過pl / sql進行操作,或者必須創建單獨的作業)

  2. 從星期一-星期六刪除2個月之前的數據,日期不應該是該月的1號。 (即,離開星期日和每月1號的數據早於2個月)

例如

*Procedure delete_log

IS

BEGIN


delete from audit_logs
where created >= trunc(sysdate - 60) and created < trunc(sysdate)
and created != (Sunday)
and created != (First of the month);

Commit;

End delete_log;*

我沒有使用pl / sql的豐富經驗,所以所有提示都值得贊賞。

謝謝,邁克

要調度作業,您可以在服務器級別使用cron作業,也可以使用Oracle Scheduler運行任務http://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse002.htm#i1006395

這樣的事情會起作用:

CREATE OR REPLACE PROCEDURE delete_log
IS
BEGIN
   DELETE FROM audit_logs
         WHERE     TRUNC (created) < ADD_MONTHS (TRUNC (SYSDATE), -2)
               AND TO_CHAR (TRUNC (created), 'DY') != 'SUN'
               AND TO_CHAR (TRUNC (created), 'DD') != '01';
END;
/

DBMS_Scheduler日歷日歷語法將支持在每月的第一個星期六運行一個進程。

語法類似於:

'FREQ=MONTHLY; BYDAY=SAT; BYSETPOS=1'

您將添加您希望其運行的確切時間的子句。

'FREQ=MONTHLY; BYDAY=SAT; BYHOUR=3; BYMINUTE=30; BYSECOND = 0; BYSETPOS=1'

就刪除而言:

delete from audit_logs
where created                   <  add_months(trunc(sysdate,'MM'),-2)   and
      to_char(created,'DY')     != 'SUN'                                and
      extract(DAY from created) != 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM