Не используйте автономные транзакции в обычном коде. Единственный случай, когда автономные транзакции действительно уместны, - это случаи, когда вы хотите записать данные в таблицу журнала независимо от того, зафиксировано ли базовое действие или нет. Например, если вы хотите зарегистрировать ошибку, откатить транзакцию и вызвать исключение, вы, вероятно, не хотите, чтобы сообщение журнала откатывалось. Вы никогда не должны использовать автономную транзакцию для обхода исключения с изменяющейся таблицей, что, как я полагаю, является причиной того, что вы использовали здесь автономную транзакцию, поскольку запрос к таблице Message
вызовет исключение с изменяющейся таблицей, если он не был в автономная транзакция.
К счастью, в этом случае нет необходимости запрашивать таблицу, для которой определен триггер, и нет необходимости использовать автономную транзакцию. Просто
create or replace trigger nb_action
AFTER INSERT ON Message
FOR EACH ROW
BEGIN
UPDATE Utilisateur
SET nb_action=nb_action+1
where id_utilisateur=:new.id_auteur;
END ;