1
respuesta

Duda al ejecutar varias veces el SP

Buen dia

Tengo una duda, estaba realizando el ejercicio y todo funciono normal hasta que tuve la curiosidad de ingresar la misma venta al mismo cliente varias veces. Al hacer esto me arrojo el siguiente mensaje pero de vez en cuando:

07:07:11 CALL SP_VENTA('20210619', 15, 100) Error Code: 1062. Duplicate entry '87978-1041119' for key 'items.PRIMARY' 0.156 sec

Luego lo intento de nuevo y funciona a veces si y otras veces no. ¿será que el RAND esta generando varias veces el mismo numero?

Este es el SP: CREATE DEFINER=root@localhost PROCEDURE SP_VENTA(FECHA DATE, MAXITEMS INT, MAXCANTIDAD INT) BEGIN DECLARE VCLIENTE VARCHAR(11); DECLARE VPRODUCTO VARCHAR(10); DECLARE VVENDEDOR VARCHAR(5); DECLARE VCANTIDAD INT; DECLARE VPRECIO FLOAT; DECLARE VITEMS INT; DECLARE VNFACTURA VARCHAR(10); 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 VITEMS = F_ALEATORIO(1, MAXITEMS); WHILE VCONTADOR <=VITEMS DO SET VPRODUCTO = F_PRODUCTO_ALEATORIO(); SET VCANTIDAD = F_ALEATORIO(1,MAXCANTIDAD); SELECT PRECIO_LISTA 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; END

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola Walter, espero que estés bien.

El mensaje de error que estás viendo, "Duplicate entry '87978-1041119' for key 'items.PRIMARY'", indica que estás intentando insertar un registro en la tabla ITEMS con una clave primaria que ya existe en la tabla. El mensaje en sí indica que la clave primaria '87978-1041119' ya está presente en la tabla y, por lo tanto, se produce un conflicto al intentar insertarla nuevamente.

Es poco probable que el uso de la función RAND() esté generando duplicados en la clave primaria. La función RAND() genera números aleatorios entre 0 y 1, y normalmente no debería generar el mismo número exacto varias veces seguidas en un corto período.

El problema parece estar relacionado con el proceso de generación de la clave primaria o la forma en que se está generando el valor para la columna que se está utilizando como clave primaria en la tabla ITEMS.

¡Saludos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios