mysql存储过程--数据库批量更新组织机构树的层级name

本文介绍了一种使用MySQL存储过程批量更新组织机构树层级名称的方法,通过遍历组织机构树并根据层级代码计算层级名称,实现了组织机构表中层级名称的自动更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库根据组织机构树的层级code批量更新组织机构树的层级name

需求描述

组织机构树,每个组织机构都有层级code(level_code),根据level_code可知其上级组织信息,现在需要根据level_code 获得其level_name,通过存储过程批量更新org表中每个组织机构的level_name,如下图所示结构

在这里插入图片描述

MySQL存储过程

CREATE PROCEDURE `updateLevelName`(tenantId VARCHAR(4))
BEGIN
-- 声明变量
DECLARE cid VARCHAR(255);
DECLARE done INT;
DECLARE len INT;
DECLARE i INT;
DECLARE orgName VARCHAR(255);
DECLARE orgName1 VARCHAR(255);
 
-- 创建游标,并设置游标所指的数据(这里设置ID不为1是因为ID1的是总的大类)
DECLARE cur CURSOR for 
	SELECT level_code as cid from tab_org where del_flag = '0' AND tenant_id = tenantId;
-- 游标执行完,即遍历结束。设置done的值为1
DECLARE CONTINUE HANDLER for not FOUND set done=1;
-- 开启游标
open cur;
-- 执行循环
posLoop:LOOP
-- 如果done的值为1,即遍历结束,结束循环
	IF done=1 THEN
		LEAVE posLoop;
-- 注意,if语句需要添加END IF结束IF
END IF;
-- 从游标中取出cid
FETCH cur INTO cid;

-- 计算每个levelCode的长度len
SELECT LENGTH(level_code) INTO len FROM tab_org WHERE level_code = cid AND del_flag='0' AND tenant_id = tenantId;

-- 初始化orgName为根节点
SET orgName = (SELECT name FROM tab_org WHERE level_code = LEFT(cid,3) AND del_flag='0' AND tenant_id = tenantId);
-- 初始化i的值为6
SET i=6;

WHILE  i<=len DO
SELECT name INTO orgName1 FROM tab_org WHERE level_code = LEFT(cid,i) AND del_flag='0' AND tenant_id = tenantId;
SET orgName = CONCAT(orgName,'-',orgName1);
SET i=i+3;
END WHILE;

-- 更新level_name
UPDATE tab_org SET level_name = orgName WHERE level_code = cid AND del_flag='0' AND tenant_id = tenantId;

-- 关闭循环
END LOOP posLoop;
-- 关闭游标
CLOSE cur;
-- 关闭分隔标记
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值