Mysql递归过程

Mysql递归过程,mysql,sql,stored-procedures,recursion,Mysql,Sql,Stored Procedures,Recursion,我有一个表名css_目录,有3列目录id、目录名和根目录。我将分层目录结构存储在此表中。我已经编写了一个程序来检索给定目录id的所有子体。但是它不起作用。谁能帮帮我吗。 这是程序 CREATE PROCEDURE getDescendants (IN rootId varchar(32), INOUT desecendantsFolderId varchar(3200)) BEGIN DECLARE endOfRecord INTEGER DEFAULT 0; DECLARE

我有一个表名css_目录,有3列目录id、目录名和根目录。我将分层目录结构存储在此表中。我已经编写了一个程序来检索给定目录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。假定DegenantsFolderId最初为null,如果是这样,我看不出会有什么变化

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

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

CONCAT_WS与CONCAT类似,只是第一个参数用作分隔符,并且忽略第一个参数以外的null参数,如果所有后续参数都为null,则返回空字符串。根据代码的其余部分,技术上可能不需要NULLIF,但如果输入参数确实都为null,它将确保CONCAT_WS的最终结果将返回null。

请更具体地说明它不起作用。此外,您可能会在结尾处检查flderId中的打字错误。这不仅仅是一个打字错误。我编辑了这个问题。