TransWikia.com

Realizar varios insert a una tabla con los números que están dentro de una variable Varchar en MySql

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 ;

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP