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