Hoy en día, usar una matriz JSON sería una respuesta obvia.
Dado que esta es una pregunta antigua pero aún relevante, presenté un breve ejemplo. Las funciones JSON están disponibles desde mySQL 5.7.x / MariaDB 10.2.3
Prefiero esta solución sobre ELT () porque en realidad es más como una matriz y esta 'matriz' se puede reutilizar en el código.
Pero tenga cuidado: es (JSON) ciertamente mucho más lento que usar una tabla temporal. Es más útil. imo.
A continuación, se explica cómo utilizar una matriz JSON:
SET @myjson = '["gmail.com","mail.ru","arcor.de","gmx.de","t-online.de",
"web.de","googlemail.com","freenet.de","yahoo.de","gmx.net",
"me.com","bluewin.ch","hotmail.com","hotmail.de","live.de",
"icloud.com","hotmail.co.uk","yahoo.co.jp","yandex.ru"]';
SELECT JSON_LENGTH(@myjson);
SELECT JSON_VALUE(@myjson, '$[0]');
Y aquí un pequeño ejemplo para mostrar cómo funciona en una función / procedimiento:
DELIMITER //
CREATE OR REPLACE FUNCTION example() RETURNS varchar(1000) DETERMINISTIC
BEGIN
DECLARE _result varchar(1000) DEFAULT '';
DECLARE _counter INT DEFAULT 0;
DECLARE _value varchar(50);
SET @myjson = '["gmail.com","mail.ru","arcor.de","gmx.de","t-online.de",
"web.de","googlemail.com","freenet.de","yahoo.de","gmx.net",
"me.com","bluewin.ch","hotmail.com","hotmail.de","live.de",
"icloud.com","hotmail.co.uk","yahoo.co.jp","yandex.ru"]';
WHILE _counter < JSON_LENGTH(@myjson) DO
SET _result = CONCAT(_result, _counter, '-', JSON_VALUE(@myjson, CONCAT('$[',_counter,']')), '#');
SET _counter = _counter + 1;
END WHILE;
RETURN _result;
END //
DELIMITER ;
SELECT example();
ELT
.