De nos jours, l'utilisation d'un tableau JSON serait une réponse évidente.
Comme il s'agit d'une question ancienne mais toujours pertinente, j'ai produit un court exemple. Les fonctions JSON sont disponibles depuis mySQL 5.7.x / MariaDB 10.2.3
Je préfère cette solution à ELT () car c'est vraiment plus comme un tableau et ce «tableau» peut être réutilisé dans le code.
Mais attention: il (JSON) est certainement beaucoup plus lent que l'utilisation d'une table temporaire. C'est juste plus pratique. imo.
Voici comment utiliser un tableau 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]');
Et voici un petit exemple pour montrer comment cela fonctionne dans une fonction / procédure:
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
.