Por cierto, la comparación que haces no me parece correcta :
if (old.campo1 <> new.campo1 ) then ....
Un campo vacío (null) es un estado y no un valor comparable. Eso hace que las comparaciones entre un null y un valor no siempre den lo que te esperas. Aunque es mucho más largo, deberías escribir :
Código:
if ((old.campo1 is null and new.campo1 is not null) or
(old.campo1 is not null and new.campo1 is null) or
(old.campo1 <> new.campo1 )) then ....