mysql存储过程迭代自己获取所有子孙
mysql函数无法迭代获取结果集,只能用存储过程的OUT类型输出参数来实现,迭代调用并select出OUT类型的参数值拼接起来。注意null和字符串拼接结果还是null要做ifnull处理。
DROP PROCEDURE F_GETSUBJOB;
CREATE PROCEDURE F_GETSUBJOB(P_ROOT_ID VARCHAR(255),P_TMP VARCHAR(4000),OUT o_retsult VARCHAR(4000))
beginDECLARE sub_ret VARCHAR(4000);-- 遍历数据结束标志DECLARE done INTEGER DEFAULT FALSE;DECLARE isexist INTEGER DEFAULT 0;DECLARE ID_JOB_TMP VARCHAR(255);
-- 定义游标DECLARE ALL_CURSOtable_entryJOB CURSOR FOR SELECT DISTINCT a.VALUE_STR FROM table_entry e,table_attr a WHERE e.ID_JOBENTRY= a.ID_JOBENTRY and a.CODE='jobid' AND e.ID_JOB= P_ROOT_ID; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- DECLARE EXIT HANDLER FOR SQLEXCEPTION ;SET @@max_sp_recursion_depth = 255; -- 设置最大迭代深度
BEGIN
-- 打开游标
OPEN ALL_CURSOtable_entryJOB;-- 开始循环read_loop: LOOP
-- 从游标中取出一条FETCH ALL_CURSOtable_entryJOB INTO ID_JOB_TMP;-- 声明结束的时候IF done THENLEAVE read_loop;END IF;-- 这里做你想做的循环的事件select IFNULL(find_in_set(ID_JOB_TMP,o_retsult),0) INTO isexist;IF isexist <= 0 THENif o_retsult is not null THENSELECT CONCAT(IFNULL(o_retsult,''),',',IFNULL(ID_JOB_TMP,'')) into o_retsult;else SELECT IFNULL(ID_JOB_TMP,'') into o_retsult;CALL F_GETSUBJOB(ID_JOB_TMP,o_retsult,@sub_ret); -- 迭代调用select @sub_ret into sub_ret;IF sub_ret is not null THENSELECT CONCAT(IFNULL(o_retsult,''),',',IFNULL(@sub_ret,'')) into o_retsult;END IF;end if;END IF;END LOOP;
-- 关闭游标
CLOSE ALL_CURSOtable_entryJOB;
END;
end
;
查询:
CALL F_GETSUBJOB('440','',@xxx);
select @xxx;
java获取返回值参考我的另外一篇ibatis调用mysql带OUT类型参数的存储过程并获取返回值
mysql存储过程迭代自己获取所有子孙相关推荐
- 转载:mysql存储过程讲解
记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...
- MySQL存储过程 游标
MySQL存储过程 游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...
- mysql存储过程详细教程
原文 记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存 ...
- mysql 存储过程建表_MySQL 存储过程创建表
创建 CREATE PROCEDURE Pro_IsExistTable(ableName varchar(100),out outputParam int) BEGIN set @csql=con ...
- MySQL存储过程系列
mysql存储过程详细教程 记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCEDURE demo_in_parameter(IN p_ ...
- MySQL存储过程详解
1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...
- hibernate mysql 存储过程_hibernate调用mysql存储过程
hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...
- MySQL 存储过程初研究
最近在做一个移动设备多类型登录的统一用户系统.其中记录用户资料的部分,因为涉及到更换设备的相同用户.同一个用户多类型同时具备的情况,所以想分辨出尽量少的用户去合理记录,就需要多次查询.于是决定研究一下 ...
- mysql存储过程与自定义函数
2019独角兽企业重金招聘Python工程师标准>>> #mysql存储过程与自定义函数: delimiter $ 1.最简单的存储过程 create procedure test( ...
最新文章
- 无监督学习距离监督学习还有多远?Hinton组新作解读
- 【七招破解WinXP系统访问网络变慢的故障】
- #中的引用型是什么意识_excel的vlookup函数经常引用错误,让我告诉你原因,迅速脱离误区...
- [云炬创业基础笔记] 第四章测试16
- k8s常用对象图示:Deployment、ReplicaSet、Pod它们的关系
- C语言重要知识点回顾
- 【135天】尚学堂高淇Java300集视频精华笔记(74-76)
- python自动化之djangoform表单验证
- java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
- redis整理の配置
- android widget ViewFlipper
- Android 视频直播的流程总览
- html添加到购物车飞入动画效果,加入购物车的动画效果
- 产品化机器学习的一些思考
- 源码分析mmc体系结构
- python爬取17000个球员_Python爬取NBA球员生涯数据及简单可视化
- VTK: 拾取方式的三种实现
- CSDN 空间:“迷你博客”很迷人(2)收藏
- Python蒙特卡罗法测圆周率
- 解决方案之Android 国际化资源完美兼容6.0,7.0,8.0
热门文章
- 使用mysql-proxy读写分离时的注意事项_mysql-proxy中Admin Plugin的使用以及读写分离的问题...
- 树莓派4b安装windows iot_树莓派4B基于python3安装opencv4全教程
- TikTok如何将粉丝转到私域,提高转化和复购?
- 跨境电商ERP是什么?
- HDU-1540 Tunnel Warfare 线段树最大连续区间 或 STL巧解
- 蓝桥杯 入门训练 A+B问题进阶版(两个3000位数的加法)
- CSS垂直居中的七个方法
- Logstash+Kibana+多ElasticSearch集群部署
- php如何进行界面切换,PHP 页面跳转到另一个页面的多种方法方法总结
- 单元格填充为0的html,Excel如何在数据信息表中把空单元格填写为数字“0”