Puisqu'il n'y a rien de tel que xrange, on peut utiliser une table séparée stockée avec un entier (comme répondu précédemment), ou simplement créer une procédure stockée pour faire le travail :
DROP PROCEDURE IF EXISTS xrange;
DELIMITER //
CREATE PROCEDURE xrange(x INT, y INT)
BEGIN
DECLARE i INT DEFAULT x;
CREATE TEMPORARY TABLE xrange_tmp (c1 INT);
WHILE i < y DO
INSERT INTO xrange_tmp VALUES (i);
SET i = i + 1;
END WHILE;
END;
//
Utilisation :
CALL xrange(-2,10);
SELECT c1 FROM xrange_tmp;
DROP TABLE xrange_tmp;
Ce qui précède va évidemment être plus lent que de créer une table prête avec des entiers. C'est plus flexible.