Как правило, триггер уровня строки в таблице A не может запрашивать таблицу A. В этом случае обычно возникает исключение изменяющейся таблицы (ORA-04091).Поэтому триггер, как правило, не является правильным решением.
Предположительно, у вас есть какой-то API (то есть хранимая процедура) для удаления записей из родительской таблицы.Этот API должен запросить эту последнюю таблицу перед выдачей DELETE
для родительской таблицы.Следует позаботиться об обновлении последней таблицы в цепочке, а также об удалении данных из родительской таблицы.
Если бы вы действительно хотели решение на основе триггера, жизнь стала бы значительно более сложной.Вы можете обойти исключительную ситуацию изменяющейся таблицы с помощью
- Создание пакета с набором первичных ключей из родительской таблицы
- Создание триггера оператора before, который инициализирует эту коллекцию
- Создание триггера уровня строки, который заполняет коллекцию первичными ключами, которые были изменены оператором SQL
- Создание триггера оператора after, который выполняет итерацию по коллекции и выдает все, что необходимо для DML (в отличие от уровня строкитриггеры, триггеры уровня оператора в таблице A могут запрашивать или изменять таблицу A).
Если вы используете 11g, вы можете немного упростить это с помощью составного триггера с оператором before, после строки,и после утверждения разделов.Но у вас еще есть несколько движущихся частей, чтобы попытаться скоординировать.