mysql 存储过程demo
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,从没写过mysql 存储过程,靠着百度和以前写oracle存储过程的经验写了一个,还算顺利,留个例子吧CREATE DEFINER=`west_brain`@`%` PROCEDURE `man_tr
千家信息网最后更新 2025年11月06日mysql 存储过程demo
从没写过mysql 存储过程,靠着百度和以前写oracle存储过程的经验写了一个,还算顺利,留个例子吧
CREATE DEFINER=`west_brain`@`%` PROCEDURE `man_tree_area`( )BEGIN -- 存储树状结果处理sql变量 DECLARE var_code VARCHAR ( 1000 ); DECLARE var_pcode VARCHAR ( 1000 ); DECLARE var_name VARCHAR ( 1000 ); DECLARE var_count INT; -- 存储的一些标记变量 DECLARE buf_parents VARCHAR ( 1000 ) DEFAULT ''; DECLARE buf_names VARCHAR ( 1000 ) DEFAULT ''; DECLARE buf_code VARCHAR ( 100 ) DEFAULT ''; DECLARE buf_update INT DEFAULT FALSE; DECLARE buf_is_leaf INT DEFAULT 0; -- 树级别 根为1 DECLARE buf_tree_level int DEFAULT 0; -- 是否叶子节点 0 非 1是 DECLARE buf_tree_leaf int DEFAULT 1; -- 存储表循环游标的变量 DECLARE vcode VARCHAR ( 64 ); DECLARE vparent VARCHAR ( 1000 ); -- 游标结束的处理变量 DECLARE done INT DEFAULT FALSE; -- 定义表循环游标 DECLARE mycursor CURSOR FOR ( SELECT CODE, parent FROM adm_sys_area_info ); -- 定义游标溢出的处理操作 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 打开游标 OPEN mycursor; -- 定义游标循环 tableloop : LOOP -- 读取游标的一条数据到变量里 FETCH mycursor INTO vcode, vparent; -- 如果上步游标操作没有读取到记录,则done 会被设置为 TRUE,退出 名称为myloop的循环 IF done THEN LEAVE tableloop; END IF; -- 记录当前记录的区域编码 SET buf_code = vcode; -- 判断自己是否是叶子节点 SELECT count(*) into var_count from adm_sys_area_info where parent = vcode; if var_count = 0 then update adm_sys_area_info set tree_leaf = 1 where code = vcode; else update adm_sys_area_info set tree_leaf = 0 where code = vcode; end if; set var_count = 0; -- 循环查找自己的父节点 treeloop : LOOP -- 判断自己是否存在父节点,用count来判断 SELECT count( * ) INTO var_count FROM adm_sys_area_info WHERE CODE = vparent; IF var_count = 0 THEN -- 没有上级节点了,则开始处理以前找到的父节点 IF buf_update THEN-- 更新缓存的数据 -- buf_update 为TRUE 则说明找到过父节点 -- 下面两个记录处理拼接的字符串末尾多的逗号的问题 IF ( length( buf_parents ) > 0 ) THEN SET buf_parents = LEFT ( buf_parents, CHAR_LENGTH( buf_parents ) - 1 ); END IF; IF ( length( buf_names ) > 0 ) THEN SET buf_names = LEFT ( buf_names, CHAR_LENGTH( buf_names ) - 1 ); END IF; -- 更新当前节点的父信息 UPDATE adm_sys_area_info SET parents = buf_parents, tree_names = buf_names ,tree_level = buf_tree_level WHERE CODE = buf_code; ELSE -- 当前记录是根节点 update adm_sys_area_info set tree_level = 1 where code = buf_code; END IF; -- 清理变量 SET buf_parents = ''; SET buf_names = ''; SET vparent = ''; SET buf_code = ''; SET buf_update = FALSE; SET buf_tree_level = 1; -- 结束当前记录的处理循环 LEAVE treeloop; ELSE -- 查找到了父节点 SET buf_update = TRUE; -- 查询当前节点的父节点信息 SELECT CODE, parent, area_name INTO var_code, var_pcode, var_name FROM adm_sys_area_info WHERE CODE = vparent; -- 连接字符串 SET buf_parents = CONCAT_WS( ',', var_code, buf_parents ); SET buf_names = CONCAT_WS( ',', var_name, buf_names ); -- 记录当前查找到记录的父节点code SET vparent = var_pcode; SET buf_tree_level = buf_tree_level + 1; END IF; END LOOP; END LOOP; CLOSE mycursor;END
节点
游标
变量
处理
循环
存储
过程
信息
叶子
字符
字符串
数据
更新
上级
两个
从没
例子
区域
名称
末尾
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
艳阳网络技术视频下载
高中信息技术数据库会考操作
网络安全宣导
apt是啥 网络安全
数据库重插
网络安全法规定哪个机构
轻量服务器端口
每一个服务器能开多少个端口
sd敢达数据库
网络安全有几点要注意
佛山安卓软件开发定制费用
数据库列扩大
地下城一个频道是一台服务器吗
魔兽怀旧服务器人口哪里查
网络安全策略的重要意义
奉贤区智能化数据库优点
青少年网络安全问题的内涵
我的世界服务器ip手机
简单的数据库登录页面设计
软件开发可以考教招小数吗
秋灵诚黄犬数据库
联通电信服务器打游戏怎么样不卡
公司制定网络安全责任制
东南大学网络安全916真题
cors服务器要求
广州触点科技互联网有限公司
鱼池服务器错误是怎么回事
奇东服务器
河南卓丰网络技术有限公司
曲靖网络技术招聘