Лично я бы держался подальше от триггеров. Они могут быть кошмаром, когда дело доходит до отладки, и не обязательно являются лучшими, если вы хотите уменьшить масштаб.
Если вы используете API-интерфейс PL / SQL для выполнения INSERT / UPDATE / DELETE, вы можете управлять этим простым изменением структуры без необходимости (заранее) для таблиц истории.
Все, что вам нужно, это 2 дополнительных столбца, DATE_FROM и DATE_THRU. Когда запись вставлена, DATE_THRU остается NULL. Если эта запись имеет значение UPDATEd или DELETEd, просто «завершите дату» записи, сделав DATE_THRU текущей датой / временем (SYSDATE). Показать историю так же просто, как выбрать из таблицы, единственная запись, в которой DATE_THRU равен NULL, будет вашей текущей или активной записью.
Теперь, если вы ожидаете большого объема изменений, было бы предпочтительным записать старую запись в таблицу истории, но я все равно не справился бы с триггерами, я бы сделал это с помощью API.
Надеюсь, это поможет.