Наличие большого количества логики в триггере, как правило, является плохой идеей, потому что это делает понимание системы и отслеживание потока данных исключительно трудным. Вам гораздо лучше иметь API (т.е. хранимые процедуры), которые выполняют операцию DML, а затем выполняют логику, которая в противном случае запускалась бы из триггера. Это, по крайней мере, укрепляет логику.
Если такой уровень рефакторинга невозможен, то каждый триггер вызывает процедуру (автономную или в пакете), которая выполняет фактическую манипуляцию (при необходимости, вызывая другие функции и процедуры, разумеется), является наиболее эффективным способом обработки логики в триггерах.