业务描述:机构向下管理,需要获取每个机构的所有上级节点,并得到对应的级别
效果,如图:
执行前:
MYSQL存储过程:递归查询父节点,并更新数据

执行后:
MYSQL存储过程:递归查询父节点,并更新数据

存储过程:
BEGIN  
    DECLARE fid varchar(100) default '';   
    DECLARE str varchar(100000) default '';   
        DECLARE level_m INTEGER DEFAULT 0;
    DECLARE rootId varchar(100) default '';
        DECLARE rootId_mid varchar(100) default '';
    -- 创建自定义控制游标循环变量  
    DECLARE done TINYINT DEFAULT FALSE;  
    -- 创建自定义游标 并输入结果集  
    DECLARE my_cursor CURSOR FOR SELECT comcode from xj_prpdcompany ;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  
        
        DROP table if exists str_spilt_result;
        CREATE TEMPORARY TABLE str_spilt_result(`id` int(11) NOT NULL AUTO_INCREMENT,code VARCHAR(20),cname VARCHAR(10000),level_n int(4),PRIMARY KEY (`id`));   
   
    -- 打开游标  
    OPEN my_cursor;  
    -- 循环开始  
    my_loop: LOOP  
        FETCH NEXT FROM my_cursor INTO rootId;
                IF done THEN  
                        LEAVE my_loop;  
                END IF;   
                set str=rootId;
                set rootId_mid=rootId;
                set level_m=0;
                -- 这里做你想做的循环的事件
                WHILE rootId_mid !='' and rootId is not NULL  do  
                        SET fid =(SELECT supercomcode FROM xj_prpdcompany WHERE comcode = rootId_mid);   
                        IF fid is not null THEN   
                                SET str = concat(str, ',', fid);   
                                set level_m =level_m+1;
                        END IF;   
                        SET rootId_mid = fid;
                           
                END WHILE;
                
            
                insert into str_spilt_result(code,cname,level_n) values(rootId,str,level_m);
             
    END LOOP my_loop;  
      COMMIT;
    CLOSE my_cursor;    -- 关闭游标  
    
        select * from str_spilt_result;
        update xj_prpdcompany p,str_spilt_result t set p.supercomcode=t.cname,p.`level`=t.level_n where p.comcode=t.code;
        COMMIT;
END

相关文章:

  • 2021-07-07
  • 2021-10-12
  • 2021-12-19
  • 2021-12-19
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
  • 2021-06-18
猜你喜欢
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
  • 2021-12-19
相关资源
相似解决方案