DELIMITER //
CREATE FUNCTION factorial(n INT) RETURNS INT
BEGIN
DECLARE result INT DEFAULT 1;
DECLARE i INT;
IF n < 0 THEN
RETURN NULL; -- Факториал не определен для отрицательных чисел
END IF;
SET i = 1;
WHILE i <= n DO
SET result = result * i;
SET i = i + 1;
END WHILE;
RETURN result;
END //
DELIMITER ;
SELECT n, factorial(n) AS f
FROM (SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION
SELECT 10) AS numbers;