Stack Overflow en español Asked by Xavier Romero on August 26, 2021
Tengo un procedimiento que tiene una variable de entrada IN_idExamenPrecio que es tipo VARCHAR(255) que contiene por ejemplo el valor de ‘123,432,200,340’ estos números los quiero usar por separados ya que son el idExamenPrecio de la tabla RegistroData. Quisiera hacerlo por medio de un bucle para que se ejecute varias veces el insert pero desconozco la forma hacerlo en mysql.
DELIMITER $$
CREATE PROCEDURE BDFutureLab.sp_insertar_RegistroData (
IN IN_idExamenPrecio varchar(255) // contiene los números o los IDs => '123,432,200,340'
)
BEGIN
/* Quiero ejecutar este insert varias veces según los números que están
en la variable IN_idExamenPrecio */
INSERT INTO BDFutureLab.RegistroData
(
idExamenPrecio, //Donde se deben ingresar los numeros que vienen en el IN_idExamenPrecio
fechaRegistro,
fechaActualizacion,
horaRegistro,
horaActualizacion,
estado)
VALUES (_idExamenPrecio,CURDATE(),null,CURTIME(),null,1);
END$$
DELIMITER ;
He logrado solucionar mi problema aplicando un loop que se ejecuta varias veces según los números que están en la variable IN_idExamenPrecio los cuales los extraigo con la función SPLIT_STR esto me permite hacer varios insert en la tabla RegistroData según la cantidad de números que vengan en IN_idExamenPrecio.
Les comparto el código de la solución:
DELIMITER $$
CREATE PROCEDURE BDFutureLab.sp_insertar_RegistroData (
IN IN_idExamenPrecio varchar(255) // contiene los números o los IDs => '123|432|200|340'
)
BEGIN
DECLARE a INT Default 0;
DECLARE str VARCHAR(255);
/* El Loop se ejecuta varias veces según los números que están
en la variable IN_idExamenPrecio esto me permite hacer varios insert segun la cantidad de IN_idExamenPrecio*/
simple_loop: LOOP
SET a=a+1;
SET str = SPLIT_STR(IN_idExamenPrecio,"|",a);
IF str='' THEN
LEAVE simple_loop;
END IF;
INSERT INTO BDFutureLab.RegistroData
(
idExamenPrecio, //Donde se deben ingresar los numeros que vienen en el IN_idExamenPrecio
fechaRegistro,
fechaActualizacion,
horaRegistro,
horaActualizacion,
estado)
VALUES (str,CURDATE(),null,CURTIME(),null,1);
END LOOP simple_loop;
END$$
DELIMITER ;
Correct answer by Xavier Romero on August 26, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP