0

朋友和 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 没有太多经验,所以所有提示都表示赞赏..

谢谢,迈克

4

2 回答 2

2

要调度作业,您可以使用服务器级别的 cron 作业或 Oracle 调度程序来运行任务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;
/
于 2013-07-25T17:07:21.800 回答
1

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;
于 2013-07-25T18:51:15.970 回答