mysql 存储过程demo
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,从没写过mysql 存储过程,靠着百度和以前写oracle存储过程的经验写了一个,还算顺利,留个例子吧CREATE DEFINER=`west_brain`@`%` PROCEDURE `man_tr
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
网络安全实验总结天网
服务器能当家庭电脑使用吗
云数据库包括哪些
委托软件开发无形资产
网络安全法对医疗
国内计算机网络技术
基带软件开发实例
游戏与服务器数据交互怎么改
软件开发销项税
软件开发各个阶段和特点
apache 视频服务器
银行网络安全 诈骗
高速公路网络技术环境
c支持的数据库
数据库更新时间索引
刺激战场外服服务器排名
宿迁多功能软件开发特点
三级网络技术包含什么方面
海关进出口数据库在查询
国家网络安全基地孵化器参展
软件开发设计能力
内网穿透服务器p2p
安卓手机数据库入门教程
认可零信任网络安全
主流数据库数据恢复方法
直播平台软件开发前景
联想sr250服务器管理口密码
三级网络技术 考点
计算机网络技术音频
杨浦区大规模软件开发销售公司