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

Disparador MySQL tipo UPDATE

Estas en el tema de Disparador MySQL tipo UPDATE en el foro de Mysql en Foros del Web. Buenas noches señores de foros del web Uso Win 7 y XAMPP v 1.8.1 con PHP v 5.4.7, MYSQL v 5.0.10 y Apache v 2.4 ...
  #1 (permalink)  
Antiguo 01/11/2012, 22:11
Avatar de Aoshy  
Fecha de Ingreso: noviembre-2012
Ubicación: Chiclayo
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Disparador MySQL tipo UPDATE

Buenas noches señores de foros del web

Uso Win 7 y XAMPP v 1.8.1 con PHP v 5.4.7, MYSQL v 5.0.10 y Apache v 2.4

Bien, cuento con las siguientes tablas:

Código MySQL:
Ver original
  1. Create table MORTALIDAD (
  2.     id_cuy Int NOT NULL,
  3.     nombre_mortalidad Char(200),
  4.     descripcion_mortalidad Char(200),
  5.     fechmuerte_mortalidad Date,
  6.     cantidad_mortalidad Int,
  7.  Primary Key (id_cuy)) ENGINE = InnoDB;

NOTA.- el id de MORTALIDAD es PFK

Código MySQL:
Ver original
  1.     id_cuy Int NOT NULL AUTO_INCREMENT,
  2.     id_jaba Int NOT NULL,
  3.     id_tipo Int NOT NULL,
  4.     descripcion_cuy Char(250),
  5.     periodogestacion_cuy Int,
  6.     numparto_cuy Varchar(20),
  7.     tamano_cuy Double(5,2),
  8.     sexo_cuy Char(20),
  9.     edad_cuy Int,
  10.     peso_cuy Double(6,2),
  11.     estado_cuy Varchar(5),
  12.     gestando_cuy Varchar(5),
  13.  Primary Key (id_cuy)) ENGINE = InnoDB;

NOTA.- el campo estado_cuy por defecto es '1' que siginifica VIVO y '0' para MUERTO el cual se actualiza de '1' a '0' usando la siguiente Routine o SP

Código MySQL:
Ver original
  1. CREATE PROCEDURE `actualizar_estado`(OUT estado_cuy VARCHAR(5))
  2.     UPDATE cuy SET  estado_cuy =  '0'
  3.     WHERE  cuy.id_cuy = '1';

La idea es la siguiente :

Se insertan N cuyes en la tabla respectiva con su estado por defecto en '1'.
Utilizare en algun momento el SP "actualizar_estado" ante este evento UPDATE ocurrido en la tabla CUY se dispara el siguiente TRIGGER "inserta_mortalidad" que realizara el INSERT respectivo en la tabla MORTALIDAD.

Código MySQL:
Ver original
  1. CREATE TRIGGER inserta_mortalidad AFTER UPDATE ON cuy
  2.     DECLARE cant INT default 0;
  3.     DECLARE cod INT;
  4.    
  5.     SET cod = (SELECT id_cuy FROM cuy WHERE id_cuy = '1');
  6.     SET NEW.id_cuy = cod;
  7.     SET cant = cant + 1;
  8.     SET NEW.cantidad_mortalidad = cant;
  9.    
  10.     INSERT INTO mortalidad (id_cuy,nombre_mortalidad, descripcion_mortalidad,
  11.     fechmuerte_mortalidad, cantidad_mortalidad)
  12.     VALUES(NEW.id_cuy,NEW.nombre_mortalidad, NEW.descripcion_mortalidad,
  13.     NEW.fechmuerte_mortalidad, NEW.cantidad_mortalidad);
  14. END$$

y me arroja el siguiente error, que no me deja guardar el disparador en la tabla CUY:

SQL Error 1362: Actualización de la NUEVA fila no esta permitida despues del disparador/trigger.

Gracias por su tiempo.

Última edición por Aoshy; 04/11/2012 a las 08:51
  #2 (permalink)  
Antiguo 04/11/2012, 21:37
Avatar de Aoshy  
Fecha de Ingreso: noviembre-2012
Ubicación: Chiclayo
Mensajes: 11
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Disparador MySQL tipo UPDATE

Hola foros del web, si que cometí un gran error al intentar que funcione este trigger. Así que tuve que verlo desde otra perspectiva y conseguí el resultado, bueno eso creo >_<

Bien ahora tengo 02 procedimientos almacenados...uno es el que esta arriba mencionado actualizar_estado que como verán actualiza el estado del cuy de vivo a muerto con '0' el siguiente SP es agrega_mortalidad

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS agrega_mortalidad;
  2.  
  3. DELIMITER $$
  4.  
  5. CREATE PROCEDURE agrega_mortalidad(cod INT, nom CHAR(200), des CHAR(200), fech DATE, cant INT)
  6.     DECLARE est INT;
  7.     DECLARE cant INT DEFAULT 0;
  8.     DECLARE cod INT;
  9.    
  10.     SET est = (SELECT cuy.estado_cuy FROM cuy WHERE cuy.estado_cuy = '0')
  11.     SET cod = (SELECT cuy.id_cuy FROM cuy WHERE cuy.id_cuy = '1');
  12.     SET cant = cant + 1;
  13.  
  14.     IF (est = '0') THEN
  15.         INSERT INTO mortalidad (id_cuy,nombre_mortalidad, descripcion_mortalidad,
  16.         fechmuerte_mortalidad, cantidad_mortalidad)
  17.         VALUES(cod,'pulmonia','exposición al frio','2012-11-04',cant);
  18.     END IF;    
  19. END $$
  20. DELIMITER ;

el cual agregara los datos a la tabla MORTALIDAD y haré que se ejecute usando un disparador luego de que se actualice el estado del cuy de 1 a 0 de esta manera

Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE TRIGGER tr_inserta_mortalidad AFTER UPDATE ON cuy
  3.         CALL agrega_mortalidad(@a, @b, @c, @d, @e);
  4. END$$

y listo ..espero que le sirva a alguien

Última edición por Aoshy; 06/11/2012 a las 17:04

Etiquetas: disparador, php, select, sql, tabla, tipo, update, campos
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 18:53.