Я бы хотел, чтобы вы помогли создать скрипт для получения результатов и, при необходимости, обновить поле в моей таблице.
В моем приложении есть люди (таблица PERSON), которые создают REQUESTS (таблица REQUEST). Человек активен, когда он создал запрос в течение последних 3 лет. Я создал поле (ACTIVE - значение по умолчанию: 1) в таблице PERSON, чтобы узнать, активен ли этот человек.
Я создаю запрос для получения количества запросов для каждого человека (общее количество запросов, активный запрос, неактивный запрос):
-- PERSONS List with number of request for each person and RE_ACTIVE field
SELECT p.id,
p.lastname || ' ' || p.firstname personname,
p.company,
p.active,
(SELECT count(*)
FROM request req
WHERE req.personid = p.id) total_request_nb,
(SELECT count(*)
FROM request reqact
WHERE reqact.personid = p.id
AND reqact.requestdate > add_months(trunc(sysdate, 'YYYY'), -36)) nb_active_requests,
(SELECT count(*)
FROM request reqinact
WHERE reqinact.personid = p.id
AND reqinact.requestdate < add_months(trunc(sysdate, 'YYYY'), -36)) nb_inactive_requests,
CASE
WHEN EXISTS (SELECT *
FROM request reqreact
WHERE reqreact.personid = p.id
AND reqreact.requestdate > add_months(trunc(sysdate, 'YYYY'), -36))
THEN 1
ELSE 0
END re_active
FROM person p;
Этот скрипт работает. Я хотел бы обновить поле ACTIVE, когда человек активен (с предыдущим результатом). Например:
UPDATE PERSON p SET ACTIVE =
CASE WHEN (
(SELECT count(*)
FROM request reqreact
WHERE reqreact.personid = p.id
AND reqreact.requestdate > add_months(trunc(sysdate, 'YYYY'), -36)) > 0
)
THEN 1
ELSE 0
END
Я хотел бы знать, возможно ли сделать это в том же сценарии? Следовательно, я мог знать, сколько обновлений было выполнено, не удалось, ... за один запрос.
Заранее благодарим за помощь