通過部門ID查詢層級顯示名稱。
如:select getDepartmentListName(154)
測試部門/一級子部門/二級子部門/三級子部門/四級部門
DELIMITER $$
USE `sporch`$$
DROP FUNCTION IF EXISTS `getDepartmentListName`$$
CREATE DEFINER=`sporch`@`%` FUNCTION `getDepartmentListName`(depId INT) RETURNS VARCHAR(1000) CHARSET utf8
BEGIN
#SHOW OPEN TABLES WHERE In_use > 0;
#SHOW PROCESSLIST
#KILL {id}
DECLARE depName VARCHAR(1000) DEFAULT '';
DECLARE tmpName VARCHAR(1000) DEFAULT '';
SET @depId = depId;
#循環遞歸
WHILE @depId IS NOT NULL AND @depId > 0 DO
SELECT departmentPid,departmentName INTO @depId,tmpName FROM t_department WHERE departmentId=@depId;
IF tmpName IS NULL OR tmpName = '' THEN
SET @depId = NULL;
ELSE
#判斷是否爲空
IF tmpName != '' THEN
SET depName = CONCAT(tmpName,'/',depName);
END IF;
#退出
IF @depId = 0 THEN
SET @depId = NULL;
END IF;
END IF;
END WHILE;
IF depName IS NOT NULL AND LENGTH(depName) > 2 THEN
SET depName = REVERSE(SUBSTR(REVERSE(depName),2));
END IF;
RETURN depName;
END$$
DELIMITER ;