Триггер не может завершиться ошибкой, и транзакция по-прежнему будет перенесена. У вас есть несколько вариантов, чтобы убедиться, что триггер не выходит из строя.
1 - Вы можете убедиться, что после не сбоит, продублировав логику для проверки ограничений и не пытаясь выполнить операцию, которая нарушила бы ограничения:
т.е.
INSERT INTO test WHERE val IS NOT NULL
2 - Вы можете отложить потенциально сбойное действие, используя шаблон проектирования очереди, в котором действия, которые могут или не могут завершиться неудачей, ставятся в очередь, ставя в очередь таблицу, в которой операция постановки в очередь не может быть неудачной.
т.е.
INSERT INTO ACTION_QUEUE (action, parameters) VALUES ('INSERT INTO TEST', val)