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

[SOLUCIONADO] Trigger que inserte cuando algo se ha modificado

Estas en el tema de Trigger que inserte cuando algo se ha modificado en el foro de Mysql en Foros del Web. Cordial Saludo, Estoy tratando de implementar un TRIGGER en mysql para un taller pero se me ha dificultado, el enunciado es guardar en una tabla ...
  #1 (permalink)  
Antiguo 03/10/2014, 13:23
 
Fecha de Ingreso: febrero-2013
Ubicación: Cali Colombia
Mensajes: 118
Antigüedad: 11 años, 8 meses
Puntos: 0
Trigger que inserte cuando algo se ha modificado

Cordial Saludo,

Estoy tratando de implementar un TRIGGER en mysql para un taller pero se me ha dificultado,
el enunciado es guardar en una tabla (auditoria )cuando alguien modifique el campo salario de una tabla (empleado) . En este ejercicio como no existe una tabla auditoria entonces la creo desde el Trigger

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE trigger register_auditoria_Trigger
  3. BEFORE UPDATE ON empleado FOR EACH ROW
  4.     CREATE TABLE IF NOT EXISTS auditoria(codEmpleado INT PRIMARY KEY
  5.                                         ,Nombre VARCHAR(10),
  6.                                         Apellido VARCHAR(10),
  7.                                         salarioAntiguo int(8),
  8.                                         salarioNuevo int(8),
  9.                                         fecha DATE);
  10.         IF NEW.salario != OLD.salario THEN
  11.             INSERT INTO Auditoria VALUES(OLD.codEmpleado,OLD.Nombre,OLD.Apellido,OLD.salario,NEW.salario,CURDATE());
  12.         END IF;
  13. //

Me podrian ayudar, gracias....
  #2 (permalink)  
Antiguo 03/10/2014, 16:07
 
Fecha de Ingreso: febrero-2013
Ubicación: Cali Colombia
Mensajes: 118
Antigüedad: 11 años, 8 meses
Puntos: 0
Trigger Porfavor necesito su colaboracion PLISSS

Cordial Saludo, intento implementar este trigger donde compare si la fecha inicio es menor a la fecha final (en esta db tiene dos campos fechas) entonces inserte la fecha actual (curdate())
en el caso que la fecha final sea mayor que la actual entonces inserte igualmente la actual.

No le veo como mayor dificultad pero al implementar este trigger simplemente no permite
insertar en cualquiera de estos dos casos, por el contrario si no estan dentro de estos casos
si lo hace. Quien me podria dar una mano en esto ?

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE TRIGGER insert_fecha_fina_trigger
  3. BEFORE INSERT ON cargoxempleado FOR EACH ROW
  4.     IF NEW.fecha_final > CURDATE() THEN
  5.         INSERT INTO cargoxempleado VALUES(NEW.codEmpleado,NEW.codCargo,NEW.codDepartamento,NEW.salario,NEW.fecha_inicio,CURDATE());
  6.     ELSEIF NEW.fecha_final < NEW.fecha_inicio THEN
  7.         INSERT INTO cargoxempleado VALUES(NEW.codEmpleado,NEW.codCargo,NEW.codDepartamento,NEW.salario,NEW.fecha_inicio,CURDATE());
  8.     END IF;  
  9. //
  #3 (permalink)  
Antiguo 03/10/2014, 16:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Trigger que inserte cuando algo se ha modificado

No abras dos threads para la misma problemática. Está expresamente prohibido.
Continua el primer hilo agregando la información necesaria.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/10/2014, 16:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Trigger Porfavor necesito su colaboracion PLISSS

Cita:
Iniciado por andres18281 Ver Mensaje
Cordial Saludo, intento implementar este trigger donde compare si la fecha inicio es menor a la fecha final (en esta db tiene dos campos fechas) entonces inserte la fecha actual (curdate())
en el caso que la fecha final sea mayor que la actual entonces inserte igualmente la actual.

No le veo como mayor dificultad pero al implementar este trigger simplemente no permite
insertar en cualquiera de estos dos casos, por el contrario si no estan dentro de estos casos
si lo hace. Quien me podria dar una mano en esto ?

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE TRIGGER insert_fecha_fina_trigger
  3. BEFORE INSERT ON cargoxempleado FOR EACH ROW
  4.     IF NEW.fecha_final > CURDATE() THEN
  5.         INSERT INTO cargoxempleado VALUES(NEW.codEmpleado,NEW.codCargo,NEW.codDepartamento,NEW.salario,NEW.fecha_inicio,CURDATE());
  6.     ELSEIF NEW.fecha_final < NEW.fecha_inicio THEN
  7.         INSERT INTO cargoxempleado VALUES(NEW.codEmpleado,NEW.codCargo,NEW.codDepartamento,NEW.salario,NEW.fecha_inicio,CURDATE());
  8.     END IF;  
  9. //
No puedes realizar operaciones DML sobre la misma tabla que dispara el trigger.
Si lo piensas, estás intentando hacer un INSERT en un TRIGGER sobre una tabla en la cual se está ejecutando ese mismo TRIGGER, y para el mismo evento, lo que dispararía otra vez el TRIGGER...
Si pudiese ejecutarse se produciría un loop infinito.

Lo que tienes que hacer es modificar el dato del campo correspondiente en el NEW, en base a la condición.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, colaboracion, procedure, trigger
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 07:25.