Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta sobre triggers en MySQL

Estas en el tema de Consulta sobre triggers en MySQL en el foro de Mysql en Foros del Web. 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. ...
  #1 (permalink)  
Antiguo 09/07/2008, 05:40
 
Fecha de Ingreso: julio-2001
Mensajes: 80
Antigüedad: 22 años, 9 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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:22.