lunes, 8 de junio de 2015

Revisar en un trigger si un campo con valor predeterminado CURRENT_TIMESTAMP tiene valor

Problema:
Se intenta revisar el valor que trae un registro que se acaba de guardar, no se le asigna un valor a un campo Fecha en la inserción ya que tiene configurada en la tabla como valor predeterminado un CURRENT_TIMESTAMP, lo que se requiere es que al momento de insertarlo se verifique que:
1) Es un registro nuevo (no se le puso fecha y se toma el CURRENT_TIMESTAMP)
2) En caso de que tenga asignado una fecha diferente a la actual no tomarlo en cuenta para un segundo proceso.
3) Se usará un trigger BEFORE INSERT

Solución.

if (cast(New.Fecha as date) = curdate()) or New.Fecha is null or NEW.Fecha = '0000-00-00 00:00:00'  then
 //Proceso en caso de ser nuevo o fecha actual
end if

El error que tenía antes de encontrar ésto era que suponía que si no se declara un valor en el campo Fecha entraba al trigger con valor NULL, lo cual es incorrecto ya que trae un valor de '0000-00-00 00:00:00' y éste no lo había considerado en la sentencia de evaluación.