Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/07/2008, 05:40
engeneral
 
Fecha de Ingreso: julio-2001
Mensajes: 80
Antigüedad: 22 años, 10 meses
Puntos: 1
Consulta sobre triggers en MySQL

Tengo una duda sobre triggers en MySQL. Quiero hacer un sistema de auditoría para controlar las inserciones, modificaciones y eliminaciones en una serie de tablas. A continuación pongo un ejemplo:

Código:
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; //
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.

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?
__________________
Carlos Capote Pérez-Andreu