Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2012, 22:11
Avatar de Aoshy
Aoshy
 
Fecha de Ingreso: noviembre-2012
Ubicación: Chiclayo
Mensajes: 11
Antigüedad: 11 años, 6 meses
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