A trigger is always executed as part of the same transaction
within which the triggering statement is executing. When no
exceptions occur within the trigger code block, the effects
of any DML commands within the trigger are committed if and
only if the transaction containing the triggering statement
is committed. Therefore, if the transaction is rolled back,
the effects of any DML commands within the trigger are also
rolled back.
If an exception does occur within the trigger code block,
but it is caught and handled in an exception section,
the effects of any DML commands within the trigger are
still rolled back nonetheless. The triggering statement
itself, however, is not rolled back unless the application
forces a roll back of the encapsulating transaction.
If an unhandled exception occurs within the trigger code
block, the transaction that encapsulates the trigger is
aborted and rolled back. Therefore the effects of any DML
commands within the trigger and the triggering statement,
itself are all rolled back.