Я новичок в Oracle SQL и PL / SQL.
Мне было поручено получить записи из 3 таблиц. mccm_ops_monitoring_1_day, который содержит данные текущего дня, mccm_ops_monitoring_7_days, который содержит данные за последние 7 дней. Основываясь на объединениях этих таблиц вместе со статической таблицей alarm_control_table, мне нужно найти разницу между значениями текущего дня и последних 7 дней в среднем. Результат должен быть сгруппирован из mccm_ops_monitoring_1_day через 15 минут. интервалы. Я создал запрос и получил желаемый результат.
Проблема в том, что я должен поместить эти результаты в другую таблицу, которая обновляется каждые 15 минут при выполнении запроса. Я пытался сделать это с помощью процедуры и запланировал задание, но это вызывало дублирование записей столько раз, сколько выполнялось задание. Поэтому мне пришлось отказаться от процедуры. Я пытался использовать материализованное представление, но оно само по себе не обновлялось.
Запрос выглядит следующим образом. Пожалуйста, помогите мне найти решение.
SELECT
to_timestamp((TO_CHAR(SYSDATE,'DD-MON-RR')|| ' '|| TO_CHAR(m.contact_date,'HH:MI:SS AM')), 'DD-MON-RR HH:MI:SS AM') AS contact_date,
m.interactivechannelname,
m.interactionpointname,
nvl(m.channel_type,'UNKNOWN')channel_type,
m.cbu,
m.segment,
m.visits todays_visits,
nvl(w.visits,0) last_7_days_visits,
m.visits - nvl(w.visits,0) today_vs_7days_visits_diff,
m.accepts todays_accepts,
nvl(w.accepts,0) last_7_days_accepts,
m.accepts - nvl(w.accepts,0) today_vs_7days_accepts,
CASE
WHEN ( m.visits - w.visits ) / 100 > c.visit_threshold OR ( w.visits - m.visits ) / 100 > c.visit_threshold THEN 'YES'
WHEN ( m.accepts - w.accepts ) / 100 > c.accept_threshold OR ( w.accepts - m.accepts ) / 100 > c.accept_threshold THEN 'YES'
END
AS alert_msg,
CASE
WHEN ( m.visits - w.visits ) / 100 > c.visit_threshold OR ( w.visits - m.visits ) / 100 > c.visit_threshold THEN c.alarm_text
WHEN ( m.accepts - w.accepts ) / 100 > c.accept_threshold OR ( w.accepts - m.accepts ) / 100 > c.accept_threshold THEN c.alarm_text
END
AS alarm_text
FROM
mccm_ops_monitoring_1_days m
LEFT JOIN mccm_ops_monitoring_7_days w ON TO_CHAR(m.contact_date,'HH24:MI:SS AM') = TO_CHAR(w.contact_date,'HH24:MI:SS AM')
AND m.interactivechannelname = w.interactivechannelname
AND m.interactionpointname = w.interactionpointname
AND nvl(m.channel_type,'UNKNOWN') = nvl(w.channel_type,'UNKNOWN')
AND m.cbu = w.cbu
AND m.segment = w.segment
LEFT JOIN alarm_control_table c ON m.interactivechannelname = c.interactivechannelname
AND m.interactionpointname = c.interactionpointname
AND nvl(m.channel_type,'UNKNOWN') = nvl(c.channel_type,'UNKNOWN')
AND m.cbu = c.cbu
AND m.segment = c.segment;