我正在尝试制作一个可为特定类别递归构建路径的函数
CREATE FUNCTION getPath(inId INT)
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE return_path TEXT;
DECLARE return_parent_id INT;
SELECT CONCAT('/', name) INTO return_path FROM article_categories WHERE id = inId;
SELECT parent_id INTO return_parent_id FROM article_categories WHERE id = inId;
IF return_parent_id > 0 THEN
SELECT CONCAT(getPath(return_parent_id), return_path) INTO return_path;
END IF;
RETURN return_path;
END
当我尝试使用没有父项的类别(parent_id = 0)运行此函数时,它可以正常工作,但是当我尝试使用parent_id>
0的类别时,我得到1424递归存储的函数和触发器是不允许的。
我该如何解决?我将在常规的Web托管服务上托管此代码,该服务至少应具有MySQL服务器版本5.1。
在Ike Walker的帮助下,我做了一个程序,但是效果很好
DROP PROCEDURE IF EXISTS getPath;
DELIMITER //
CREATE PROCEDURE getPath(IN category_id INT UNSIGNED, OUT return_path TEXT)
BEGIN
DECLARE parent_id INT UNSIGNED;
DECLARE path_result TEXT;
SET max_sp_recursion_depth=50;
SELECT CONCAT('/', ac.name), ac.parent_id INTO return_path, parent_id FROM article_categories AS ac WHERE ac.id = category_id;
IF parent_id > 0 THEN
CALL getPath(parent_id, path_result);
SELECT CONCAT(path_result, return_path) INTO return_path;
END IF;
END //
DELIMITER ;
然后我用这样的东西来称呼它
CALL getPath(72, @temp); SELECT @temp;
即使设置了max_sp_recursion_depth,MySQL也不允许递归功能。
如果您设置max_sp_recursion_depth,则它的过程中最多允许255个递归。
因此,我建议您使用一个INOUT变量作为return_path的过程替换您的函数。
是否可以在HSQLDB中创建递归存储过程? 我编写了以下一个来更新一个记录,并递归地更新所有父记录: 但我得到了以下错误: 在HyperSQL用户指南中,我找到了一些信息(请参阅HyperSQL用户指南中的递归例程),但它似乎只支持函数。 提前感谢您的支持。
存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。存储函数可以通过 return 语句返回函数值,主要用于计算并返回一个值。而存储过程没有直接返回值,主要用于执行操作。 在 MySQL 中,使用 CREATE FUNCTION 语句来创建存储函数,其语法形式如下: CREATE FUNCTION sp_name ([func_parameter[...]]) RETURNS ty
考虑Python中的这个基本递归: 根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。 Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加? 作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我
问题内容: (希望)对某些人来说,这是一个非常简单的问题。 我有一个来自mySQL数据库的递归菜单,现在我的主要问题是: 创建URL的最佳方法是什么?我希望输入每行的标题,例如/ eggs / milk / bacon /。鸡蛋处于0级,例如:鸡蛋0,牛奶1,培根2。关于如何动态输出此内容的任何想法? 对于“ cletus”所说的这个问题,我几乎要去做些评论:PHP / MySQL- 建立导航菜单
问题内容: 考虑一个这样的表: 其中存储了一个简单的目录结构。如何通过单个SELECT查询获得目录的所有子目录? 问题答案: 可以,但是您需要更改数据库结构;进行更改后,您可以在一个查询中检索任意深度的树。查询稍微复杂一些,但是仍然非常简单。 在数据库(SitePoint)中存储分层数据 -本文是分步进行的,非常清楚。 在MySQL中管理分层数据 -与上述内容不同。
问题内容: 我有下表: 现在,我需要一个mysql中的存储过程,该存储过程以递归方式调用自身并返回计算出的数量。例如,id 6有5个父级,而3个父级又有2个父级。因此,我需要计算(= 240)作为结果。 我对存储过程还很陌生,将来我不会经常使用它们,因为我更喜欢在程序代码中而不是在数据库中使用业务逻辑。但是在这种情况下,我无法避免。 也许mysql专家(就是您)可以在几秒钟内破解一条工作语句。 问