Поскольку @GMB указывает, что вы не можете делать то, что просите, со стандартным триггером строки до / после, поскольку он не может ссылаться на swab_test, поскольку это таблица, вызывающая срабатывание триггера (что приведет к ошибке мутирующей таблицы ORA-04091 ). Но вы можете сделать это с помощью составного триггера (или оператора After). Но прежде чем перейти к этому, я думаю, что ваша модель данных имеет фатальный недостаток.
Вы установили возможность проведения множественных мазковых тестов. Логическим расширением этого является то, что каждый id_swab проверяет другое условие или другой тест на одно и то же условие. Однако тест (id_swab) отсутствует в таблице обновления вашей болезни. Это означает, что если какой-либо тест дает отрицательный результат после получения предыдущего положительного результата, пользователь исцеляется от ВСЕХ тестов. Чтобы исправить это, вам нужно включить id_swab id, чтобы определить исцеление. Поскольку GMB предлагает лучшее решение, я остановлюсь на нем подробнее. Сначала сбросьте таблицу Illness_update. Затем создайте Illness_update как представление. (ПРИМЕЧАНИЕ: в ответ на ваш вопрос вам НЕ нужен триггер для представления, все необходимое находится в swab_test; см. оконную функцию с задержкой .
create view illness_update(id_user, state, swab_date) as
select id_user, id_swab, 'healed' state,swab_date
from (
select
s.*
, lag(swab_result) over(partition by id_user, id_swab
order by id_user, id_swab, swab_date) as lag_swab_result
from swab_test s
) s
where lag_swab_result = 'positive'
and swab_result = 'negative';
Теперь, как упоминалось выше , если ваше назначение требует использования триггера, см. fiddle . Примечание: Я не использую дату (или любой другой тип данных) в качестве имени столбца. Здесь я использую swab_date во всех экземпляры.