MySQL不支持递归函数?为什么?从何时起?

Rob*_*cks 6 mysql recursion stored-procedures user-defined-functions stored-functions

我写了一个存储的FUNCTION,递归地调用自己.

但是,当我在查询中运行它时,我得到了这个无耻的错误:

错误:1424 SQLSTATE:HY000(ER_SP_NO_RECURSION)

消息:递归存储函数和触发器允许的.

"不允许"?
对.为什么我们不只是禁用WHILE循环,而我们在它呢?

我可以以任何方式启用递归函数吗?
我发现了一个错误报告,但是有任何变通方法吗?
我在Windows XP(XAMPP Server)上运行MySQL 5.1.41.

小智 3

没问题,詹科。不如 PostgreSQL 函数那么高效,但在 MySQL 过程中也是可能的:

DELIMITER $$
DROP PROCEDURE IF EXISTS test.factorial_proc$$
CREATE PROCEDURE test.factorial_proc
(
   IN n   BIGINT, 
  OUT res BIGINT 
) 
BEGIN
  SET max_sp_recursion_depth=10; 
  IF n >= 2 THEN
    CALL test.factorial_proc (n-1, res);
    SELECT n * res INTO res;
  ELSE
    SELECT n INTO res;
  END IF;
END$$
DELIMITER ;

[test]> CALL test.factorial_proc (5, @res);
[test]> CALL test.factorial_proc (5, @res1);
[test]> select @res * @res1;
+--------------+
| @res * @res1 |
+--------------+
|        14400 |
+--------------+
Run Code Online (Sandbox Code Playgroud)

谢尔盖·扎伊采夫。