Buenas noches,
Procedimiento que realiza la separación de los datos (nombre, email), en dos columnas.
DELIMITER $$
CREATE PROCEDURE `tipoDados16`(lista VARCHAR(255), lista2 VARCHAR(255))
BEGIN
DECLARE nome VARCHAR(255);
DECLARE email VARCHAR (255);
DECLARE restante1 VARCHAR(255);
DECLARE restante2 VARCHAR(255);
DECLARE pos1 INTEGER;
DECLARE pos2 INTEGER;
SET restante1=lista;
SET restante2=lista2;
WHILE INSTR(restante1,',')>0 AND INSTR(restante2, ',') > 0 DO
SET pos1=INSTR(restante1,',');
SET pos2=INSTR(restante2,',');
SET nome= LEFT(restante1, pos1 -1);
SET email= LEFT(restante2, pos2 -1);
INSERT INTO temp_nomes(nome, email) VALUES (TRIM(nome),TRIM(email));
SET restante1= SUBSTRING(restante1, pos1+1);
SET restante2= SUBSTRING(restante2, pos2+1);
END WHILE;
IF TRIM(restante1) <> '' AND TRIM(restante2) <> '' THEN
INSERT INTO temp_nomes(nome, email) VALUES (TRIM(restante1), TRIM(restante2));
END IF;
END$$
DELIMITER ;
cursor actualizado para listar resultados por persona
DELIMITER $$
CREATE PROCEDURE `loopingCursor2`()
BEGIN
DECLARE fimCursor INTEGER DEFAULT 0;
DECLARE vnome VARCHAR(255);
DECLARE vemail VARCHAR(255);
DECLARE cursor1 CURSOR FOR
SELECT nome, email FROM temp_nomes;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fimCursor =1;
OPEN cursor1;
FETCH cursor1 INTO vnome, vemail;
WHILE fimCursor =0 DO
SELECT vnome AS nome, vemail AS email;
FETCH cursor1 INTO vnome, vemail;
END WHILE;
CLOSE cursor1;
END$$
DELIMITER ;
creación de la tabla temporal y llamadas a los procedimientos.
DROP TEMPORARY TABLE IF EXISTS temp_nomes;
CREATE TEMPORARY TABLE temp_nomes (nome VARCHAR (255), email VARCHAR (255));
CALL tipoDados16('Joe Fernandez,Laura Vasquez,Belen Vasquez,Catalina Ballon', 'jfernandez@gmail.com,lvasquez@gmail.com,bvasquez@gmail.com,cballon@gmail.com');
SELECT * FROM temp_nomes;
CALL loopingCursor2();