Código:
Este ejemplo me serviría para guardar un registro en la tabla log_cambios cada vez que se elimina un registro de la tabla personas. El campo Cambios de la tabla log_cambios tiene por objeto guardar una fotografía del registro que acaba de ser eliminado.drop trigger if exists delete_personas; delimiter // create trigger delete_personas after delete on personas for each row begin declare var_Cambios text; set var_Cambios = ''; set var_Cambios = concat('Nombre: ', OLD.Nombre); set var_Cambios = concat(var_Cambios, '\n', 'Apellido1: ', OLD.Apellido1); set var_Cambios = concat(var_Cambios, '\n', 'Apellido2: ', OLD.Apellido2); set var_Cambios = concat(var_Cambios, '\n', 'Fecha_nacimiento: ', OLD.Fecha_nacimiento); set var_Cambios = concat(var_Cambios, '\n', 'DNI_NIE_Pasaporte: ', OLD.DNI_NIE_Pasaporte); set var_Cambios = concat(var_Cambios, '\n', 'Sexo: ', OLD.Sexo); insert log_cambios (Tabla, Id_tabla, Fecha, Usuario_a, Tipo, Cambios) select 'personas', OLD.Id, now(), user(), 'Delete', var_Cambios; end; //
El problema es doble: 1) la tabla persona tiene bastantes campos más aparte de los que he incluído en el código anterior y 2) si añadiese un campo a la tabla persona tendría que modificar el trigger para que se incluya el nuevo campo en la "fotografía".
¿A alguien se le ocurre una solución? ¿hay alguna manera de recorrer uno a uno los campos de "NEW" o de "OLD"? o ¿hay alguna función tipo "eval" en MySQL que me pueda servir?