CREATE DEFINER=`gsp`@`%` FUNCTION `FUN_GET_OFFICE_NODE`(`root_id` varchar(32), `root_grade` int) RETURNS varchar(32) CHARSET utf8
BEGIN
  — 定义返回参数
        declare return_id varchar(32);

        — 自定义变量
        declare temp_id varchar(32);
        declare temp_grade int;
        declare temp_parent_id varchar(32);

        — 定义初始化参数
        set temp_id = root_id;
        set temp_grade = 9;
        set temp_parent_id = ‘-1’;

  — 循环查找对应节点信息
        WHILE temp_grade > root_grade DO
                if temp_parent_id = ‘-1’ then
                  select tof.id, tof.parent_id,tof.grade into temp_id,temp_parent_id,temp_grade from tt_office tof where 1=1 and tof.id = root_id;
                else
                  select tof.id, tof.parent_id,tof.grade into temp_id,temp_parent_id,temp_grade from tt_office tof where 1=1 and tof.id = temp_parent_id;
                end if;
        end WHILE;

        — 设置返回ID信息
        set return_id = temp_id;

        — 返回所需要的层级ID
        RETURN return_id;
END

作者 mskkingtake