Если у вас есть триггер уровня строки в table_x, то этот триггер может быть запущен несколько раз одним и тем же оператором, так как этот оператор влияет на разные строки.
Порядок воздействия на эти строки является неопределенным. Таким образом, состояние table_x является неопределенным во время выполнения триггера уровня строки. Вот почему возникает исключение MUTATING TABLE.
Автономная транзакция «обманывает», просматривая зафиксированное состояние таблицы (т.е. исключая все изменения, сделанные этим оператором, и другие операторы в транзакции).
Если вы хотите, чтобы хранимая процедура смотрела на состояние table_x в ответ на активность в этой таблице, то это необходимо сделать после того, как были сделаны все изменения строк (т. Е. В триггере уровня оператора, а не на уровне строки). триггер).
Шаблон проектирования для этого часто состоит в том, чтобы установить флаг (переменную уровня пакета) в триггере уровня строки, проверить флаг в триггере уровня оператора AFTER, а при необходимости выполнить действие и сбросить его.