Простой вариант - использовать 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%'