Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Esta mal el codigo

Durante la clase final crea la siguiente funcion pero esta no tiene encuenta q no se pueden repetir codigo de producto y numero de factura por ende puede arrojar un error ala hora de cargar un mismo producto en la misma factura por duplicacion de primary key.


DECLARE vcliente VARCHAR(11);
DECLARE vproducto VARCHAR(10);
DECLARE vvendedor VARCHAR(5);
DECLARE vcantidad INT;
DECLARE vprecio FLOAT;
DECLARE vitens INT;
DECLARE vnfactura INT;
DECLARE vcontador INT DEFAULT 1;
SELECT MAX(NUMERO) + 1 INTO vnfactura FROM facturas;
SET vcliente = f_cliente_aleatorio();
SET vvendedor = f_vendedor_aleatorio();
INSERT INTO facturas (NUMERO, FECHA, DNI, MATRICULA, IMPUESTO) VALUES (vnfactura, fecha, vcliente, vvendedor, 0.16);
SET vitens = f_aleatorio(1,  maxitems);
WHILE vcontador <= vitens
DO
SET vproducto = f_producto_aleatorio();
SET vcantidad = f_aleatorio(1, maxcantidad);
SELECT PRECIO INTO vprecio FROM productos WHERE CODIGO = vproducto;
INSERT INTO items(NUMERO, CODIGO, CANTIDAD, PRECIO) VALUES(vnfactura, vproducto, vcantidad, vprecio);
SET vcontador = vcontador+1;
END WHILE;

Por otro lado yo lo resolvi de la siguiente manera:



 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_venta`(fecha DATE, maxitems INT, maxcant INT)


BEGIN

DECLARE vcliente VARCHAR(11);

DECLARE vvendedor VARCHAR(50);

DECLARE vproducto VARCHAR(50);

DECLARE vcantidad INT;

DECLARE vprecio FLOAT;

DECLARE vitem INT;

DECLARE vnventas INT;

DECLARE vimpuesto FLOAT DEFAULT 0.16;

DECLARE vcontador INT DEFAULT 1;

SET vcliente =  f_cliente_aleatorio();
SET vvendedor = f_vendedor_aleatorio();

SET vnventas = (SELECT NUMERO FROM tb_ventas
ORDER BY CAST(NUMERO AS UNSIGNED) DESC LIMIT 0,1)+1;




INSERT INTO tb_ventas (NUMERO,FECHA,DNI,MATRICULA,IMPUESTO)
VALUES
(
vnventas,fecha,vcliente,vvendedor,vimpuesto
);


WHILE vcontador<=maxitems

DO

SET vproducto = f_producto_aleatorio();

SET vcantidad = f_numero_aleatorio(1,maxcant);

SET vprecio=(SELECT PRECIO_LISTA FROM tb_productos WHERE CODIGO = vproducto);


IF NOT EXISTS(SELECT NUMERO FROM tb_items_vendidos WHERE NUMERO = vnventas) 

THEN 

INSERT INTO tb_items_vendidos(NUMERO,CODIGO,CANTIDAD,PRECIO) VALUES (vnventas,vproducto,vcantidad,vprecio);

ELSE IF NOT EXISTS(SELECT NUMERO FROM tb_items_vendidos WHERE NUMERO = vnventas AND CODIGO = vproducto) 
THEN 
    INSERT INTO tb_items_vendidos(NUMERO,CODIGO,CANTIDAD,PRECIO)VALUES(vnventas,vproducto,vcantidad,vprecio);
    ELSE
        UPDATE tb_items_vendidos SET CANTIDAD = CANTIDAD + 1 WHERE NUMERO = vnventas AND CODIGO = vproducto;  
END IF;
END IF;
SET vcontador=vcontador+1;
END WHILE;

END
1 respuesta

Hola Carlos! cómo va?

Muchas gracias por compartir tu observación sobre la clase con los demás estudiantes aqui en el foro :))

Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓.