gpt4 book ai didi

Mysql递归过程

转载 作者:行者123 更新时间:2023-11-30 00:50:14 26 4
gpt4 key购买 nike

我有一个名为 css_diectory 的表,其中包含 3 列directory_id、directory-name 和 root_directory。我在此表中存储分层目录结构。我编写了一个程序来检索给定 Directory_id 的所有后代。但这不起作用。谁能帮帮我吗。流程如下

CREATE PROCEDURE getDescendants
(IN rootId varchar(32), INOUT desecendantsFolderId varchar(3200))
BEGIN
DECLARE endOfRecord INTEGER DEFAULT 0;
DECLARE folderId varchar(32) DEFAULT "";
DECLARE folderName varchar(32) DEFAULT "";
DECLARE folderCursor CURSOR FOR
Select directory_id, directory_name from css_directory where root_directory=rootId;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET endOfRecord = 1;
OPEN folderCursor;
getFolderId: LOOP
FETCH folderCursor INTO folderId, folderName;
IF endOfRecord = 1 THEN
LEAVE getFolderId;
END IF;
Call getDescendants(folderId,desecendantsFolderId);
SET desecendantsFolderId = CONCAT(folderId,",",desecendantsFolderId);
call getDescendants(folderId,desecendantsFolderId);
END LOOP getFolderId;
END

编辑:此过程的输出始终为空集。它不会产生任何错误

最佳答案

我不是 100% 确定我遵循了您在做的事情,但看起来这里有问题:

SET desecendantsFolderId = CONCAT(folderId,",",desecendantsFolderId);

CONCAT() 有任何参数时为null,则返回值为null。据推测,descendantsFolderId 最初为 null,如果是这样,我看不出会发生什么变化。

有多种方法可以解决此问题,但这是其中之一:

SET desecendantsFolderId = NULLIF(CONCAT_WS(",",folderId,desecendantsFolderId),"");

CONCAT_WS()就像 CONCAT() ,除非第一个参数用作分隔符,第一个参数之外的空参数将被忽略,如果所有后续参数均为空,则返回空字符串。根据代码的其余部分,NULLIF() 在技术上可能不需要,但会确保 CONCAT_WS() 的最终结果如果输入参数确实全部为 null,则将返回 null。

关于Mysql递归过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21048288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com