Планировщик заданий Oracle выполняется ежедневно в одно конкретное время с двумя запросами на эту задачу - PullRequest
0 голосов
/ 04 мая 2018

Мне нужна помощь в планировщике заданий Oracle каждый день в 13:00. Я хочу выполнить два запроса для этого единственного планировщика заданий . Запросы типа

Первый простой запрос на удаление.

delete from NEWS_NO_OF_VIEWS where TO_CHAR(MONTH_YEAR,'MM-YYYY') = 
                                                         TO_CHAR(SYSDATE,'MM-YYYY')

и второй запрос вставки

INSERT INTO NEWS_NO_OF_VIEWS(NEWS_TYPE, NO_OF_VIEWS, MONTH_YEAR)    
((SELECT 'Latest News' AS NEWS_TYPE,NVL(SUM(NO_OF_VIEWED),0) NO_OF_VIEWS,MONTH_YEAR FROM(
    SELECT NO_OF_VIEWED,TO_CHAR(CREATED_DATE,'MM-YYYY') AS MONTH_YEAR FROM NEWS_LATEST_UR

 UNION ALL
    SELECT NO_OF_VIEWED,TO_CHAR(CREATED_DATE,'MM-YYYY')  AS MONTH_YEAR FROM NEWS_LATEST_EN
) E WHERE MONTH_YEAR = TO_CHAR(SYSDATE,'MM-YYYY') GROUP BY MONTH_YEAR) 

1 Ответ

0 голосов
/ 04 мая 2018

Все, что вам нужно сделать, это создать процедуру «give_some_proc_name» и поместить ваши операторы «DELETE» и «INSERT» в эту процедуру и зафиксировать, как показано ниже, так что в будущем, если вы захотите добавить или изменить оператор, то это будет легко для вас.

create or replace procedure give_some_proc_name
as
begin
delete from NEWS_NO_OF_VIEWS where TO_CHAR(MONTH_YEAR,'MM-YYYY') = TO_CHAR(SYSDATE,'MM-YYYY');
INSERT INTO NEWS_NO_OF_VIEWS(NEWS_TYPE, NO_OF_VIEWS, MONTH_YEAR)    
((SELECT 'Latest News' AS NEWS_TYPE,NVL(SUM(NO_OF_VIEWED),0) NO_OF_VIEWS,MONTH_YEAR FROM(
    SELECT NO_OF_VIEWED,TO_CHAR(CREATED_DATE,'MM-YYYY') AS MONTH_YEAR FROM NEWS_LATEST_UR
 UNION ALL
    SELECT NO_OF_VIEWED,TO_CHAR(CREATED_DATE,'MM-YYYY')  AS MONTH_YEAR FROM NEWS_LATEST_EN
) E WHERE MONTH_YEAR = TO_CHAR(SYSDATE,'MM-YYYY') GROUP BY MONTH_YEAR);
commit;
end;

Затем создайте задание, как показано ниже, которое начинается сегодня в 13:00 и выполняется каждый день в 13:00. Внутри задания ваш тип задания будет «STORE_PROCEDURE», а действие задания будет «NAME_OF_PROCEDURE», т.е. «give_some_proc_name» с префиксом имени схемы с «.» разделитель, как показано ниже.

BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'give_some_name_to_job',
    job_type        => 'STORED_PROCEDURE',
    job_action      => 'schema_name.give_some_proc_name',
    start_date      => to_date(to_char(sysdate,'DD-MON-YYYY')||' 13:00:00','DD-MON-YYYY HH24:MI:SS'),
    repeat_interval => 'freq=daily; byhour=13; byminute=0; bysecond=0;',
    enabled         => TRUE);
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...