процедура запланированная работа внутри пакета - PullRequest
0 голосов
/ 16 июня 2020

Я создал пакет очистки внутри созданной процедуры. Как запланировать процедуру около 2:00 CST?

create or replace package body purging as 

PROCEDURE del_exp IS
begin

   FOR td IN (
        SELECT 
            table_name
        FROM 
            all_tables
        where owner = 'ud_oi' and table_name not like 'lgh%'
    )
  LOOP
     EXECUTE IMMEDIATE 'DELETE FROM ' || td.table_name || ' WHERE TRUNC(case_dt) < TRUNC(sysdate - 38)' ;
  END LOOP;
end;

END del_exp;

1 Ответ

0 голосов
/ 16 июня 2020

Простой вариант - использовать DBMS_JOB; если ваша база данных недавняя , предпочтительнее DBMS_SCHEDULER. Вы должны сделать это следующим образом:

DECLARE
   X  NUMBER;
BEGIN
   SYS.DBMS_JOB.SUBMIT (
      job        => X,
      what       => 'begin purging.del_exp; end;',
      next_date  => TO_DATE ('16.06.2020 02:00:00', 'dd/mm/yyyy hh24:mi:ss'),
      interval   => 'TRUNC (SYSDATE+1) + 2 / 24',
      no_parse   => FALSE);
   SYS.DBMS_OUTPUT.PUT_LINE ('Job Number is: ' || TO_CHAR (x));
   COMMIT;
END;
/

Опция DBMS_SCHEDULER (которая также показывает, как запускать ее в рабочие дни (по крайней мере, работая здесь, где я живу)):

BEGIN
   DBMS_SCHEDULER.CREATE_JOB (
      job_name          => 'purging',
      job_type          => 'PLSQL_BLOCK',
      job_action        => 'begin purging.del_exp; end;',
      start_date        => TO_TIMESTAMP_TZ ('16.06.2020 02:00 Europe/Zagreb',
                                            'dd.mm.yyyy hh24:mi TZR'),
      repeat_interval   => 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=2; BYMINUTE=0',
      enabled           => TRUE,
      comments          => 'Purge tables');
END;
/

Просто упомяну: условие, которое вы написали:

table_name not like 'lgh%'

выглядит подозрительно. Имена таблиц - по умолчанию - в ЗАПИСИ. Если вы не создаете таблицы с использованием смешанного (или нижнего) регистра, вы можете сделать это, заключив их имена в двойные кавычки. Я надеюсь, вы этого не делали / не делали. Поэтому лучше использовать

table_name not like 'LGH%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...