MYSQL 自定義函數遞歸查出部門層級名稱顯示

通過部門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 ;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章