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

Trigger para update

Estas en el tema de Trigger para update en el foro de Mysql en Foros del Web. Hola gente, estoy tratando de hacer funcionar un trigger que después de insertar en tabla detalles_facturaproveedores me haga el update en la tabla productos, pero ...
  #1 (permalink)  
Antiguo 18/02/2013, 12:02
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 20 años, 6 meses
Puntos: 4
Trigger para update

Hola gente, estoy tratando de hacer funcionar un trigger que después de insertar en tabla detalles_facturaproveedores me haga el update en la tabla productos, pero no me funciona. el código es el siguiente.

El update funciona sin el trigger.
Código SQL:
Ver original
  1. CREATE TRIGGER cargade_precios  after INSERT ON detalles_facturaproveedores
  2. FOR EACH ROW
  3.    
  4. UPDATE  productos INNER JOIN detalles_facturaproveedores ON productos.id_producto = detalles_facturaproveedores.id_producto  INNER JOIN facturas_proveedores ON detalles_facturaproveedores.id_factura = facturas_proveedores.id_factura SET productos.precio_unitario = detalles_facturaproveedores.precio,
  5. productos.cantidad = (detalles_facturaproveedores.cantidad + productos.cantidad)  
  6.  WHERE productos.id_producto=detalles_facturaproveedores.id_producto AND  detalles_facturaproveedores.id_factura=facturas_proveedores.id_factura
  #2 (permalink)  
Antiguo 18/02/2013, 12:58
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 13 años, 5 meses
Puntos: 42
Respuesta: Trigger para update

Hola mvlsistemas,

El texto que expones se lee y se entiende bien, sin embargo, el UPDATE es difícil de entender, ¿por qué haces un INNER JOIN a la tabla "detalles_facturaproveedores"?, usando el alias NEW (chequea 13.1.15. CREATE TRIGGER Syntax) obtienes el registro que estás insertando.

Quizás con la estructura de las tablas, algunos datos de prueba y el resultado que esperas sea más sencillo ayudarte.
  #3 (permalink)  
Antiguo 18/02/2013, 13:51
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Trigger para update

Hola gracias por la respuesta.

El insert y el error

#1442 - Can't update table 'detalles_facturaproveedores' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


Código:
INSERT INTO `detalles_facturaproveedores`(`id_factura`,`Descripcion`,`codigo_barras`,`cantidad`,`precio`,`id_producto`)
 VALUES ( 6, 'Tornillo Cabeza Exagonal 1"x1/4 cincado', '7797445000588', 3150, 110.30, 1);
INSERT INTO `detalles_facturaproveedores`(`id_factura`,`Descripcion`,`codigo_barras`,`cantidad`,`precio`,`id_producto`) 
VALUES ( 6, 'ARANDELA PLANA 1/4', '7790045001014', 3150, 130.30, 2);
Las tablas son:


Código:
CREATE TABLE `detalles_facturaproveedores` (
  `id_detalle` int(11) NOT NULL auto_increment,
  `id_factura` int(11) NOT NULL,
  `Descripcion` varchar(200) NOT NULL,
  `codigo_barras` varchar(30) default NULL,
  `cantidad` int(11) default NULL,
  `precio` decimal(18,2) default NULL,
  `id_producto` int(11) NOT NULL,
  PRIMARY KEY  (`id_detalle`,`id_factura`),
  KEY `id_factura` (`id_factura`),
  KEY `id_producto` (`id_producto`)
) ENGINE=InnoDB
Código:
CREATE TABLE `facturas_proveedores` (
  `id_factura` int(11) NOT NULL auto_increment,
  `numero` varchar(20) NOT NULL,
  `Fecha` date NOT NULL,
  `formade_pago` varchar(15) default NULL,
  `IVA` varchar(20) default NULL,
  `Descuento` smallint(6) default NULL,
  `id_proveedor` int(11) NOT NULL,
  PRIMARY KEY  (`id_factura`),
  UNIQUE KEY `numero` (`numero`),
  KEY `id_proveedor` (`id_proveedor`)
) ENGINE=InnoDB
Código:
CREATE TABLE `productos` (
  `id_producto` int(11) NOT NULL auto_increment,
  `descripcion` varchar(100) NOT NULL,
  `codigo_barras` varchar(30) default NULL,
  `medida` varchar(40) default NULL,
  `cantidad` smallint(6) default NULL,
  `precio_unitario` decimal(18,2) default NULL,
  `id_marca` int(11) NOT NULL,
  `id_subrubro` int(11) NOT NULL,
  `detalles` varchar(200) default NULL,
  PRIMARY KEY  (`id_producto`),
  UNIQUE KEY `codigo_barras` (`codigo_barras`)
) ENGINE=InnoDB
  #4 (permalink)  
Antiguo 18/02/2013, 15:39
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 13 años, 5 meses
Puntos: 42
Respuesta: Trigger para update

Hola mvlsistemas,

Trata modificando el trigger de la siguiente forma:

Código MySQL:
Ver original
  1. /* Trigger structure for table `cargade_precios` */
  2.  
  3. /*!50003 DROP TRIGGER*//*!50032 IF EXISTS */ /*!50003 `cargade_precios` *///
  4.  
  5. /*!50003 CREATE TRIGGER `cargade_precios` AFTER INSERT ON `detalles_facturaproveedores`
  6. FOR EACH ROW
  7. BEGIN    
  8.   UPDATE `productos`
  9.     SET `productos`.`precio_unitario` = NEW.`precio`,
  10.         `productos`.`cantidad` = (`productos`.`cantidad` + NEW.`cantidad`)
  11.   WHERE `productos`.`id_producto` = NEW.`id_producto`;
  12. END *///

En sqlfiddle.com está el ejemplo completo.

Espero te sea útil.
  #5 (permalink)  
Antiguo 18/02/2013, 18:48
 
Fecha de Ingreso: mayo-2004
Mensajes: 903
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Trigger para update

Gracias. No conocía SQL Fiddle!

Ahora lo pruebo, pero mi trigger no se si es lo que realmente necesito.

En realidad lo que intento es:

Cargar en detalle_facturaproveedores una nueva factura de compra y que con el trigger una vez que en esa tabla cargué la cantidad y precio del producto nuevo comprado se actualice stock(campo cantidad) y precio_unitario en productos. Está bien eso?

Etiquetas: insert, join, tabla, trigger, update
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 11:12.