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存储过程迭代自己获取所有子孙相关推荐

  1. 转载:mysql存储过程讲解

    记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...

  2. MySQL存储过程 游标

    MySQL存储过程  游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...

  3. mysql存储过程详细教程

    原文 记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分;  CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存 ...

  4. mysql 存储过程建表_MySQL 存储过程创建表

    创建 CREATE PROCEDURE  Pro_IsExistTable(ableName varchar(100),out outputParam int) BEGIN set @csql=con ...

  5. MySQL存储过程系列

    mysql存储过程详细教程 记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分;  CEATE PROCEDURE demo_in_parameter(IN p_ ...

  6. MySQL存储过程详解

    1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...

  7. hibernate mysql 存储过程_hibernate调用mysql存储过程

    hibernate调用mysql存储过程 在最近的项目中,碰到一小段数据库数据分析的程序,需要结合多张表联合查询或涉及到子查询,项目主要采用的java ee开发,使用了hibernate框架,由于这些 ...

  8. MySQL 存储过程初研究

    最近在做一个移动设备多类型登录的统一用户系统.其中记录用户资料的部分,因为涉及到更换设备的相同用户.同一个用户多类型同时具备的情况,所以想分辨出尽量少的用户去合理记录,就需要多次查询.于是决定研究一下 ...

  9. mysql存储过程与自定义函数

    2019独角兽企业重金招聘Python工程师标准>>> #mysql存储过程与自定义函数: delimiter $ 1.最简单的存储过程 create procedure test( ...

最新文章

  1. 无监督学习距离监督学习还有多远?Hinton组新作解读
  2. 【七招破解WinXP系统访问网络变慢的故障】
  3. #中的引用型是什么意识_excel的vlookup函数经常引用错误,让我告诉你原因,迅速脱离误区...
  4. [云炬创业基础笔记] 第四章测试16
  5. k8s常用对象图示:Deployment、ReplicaSet、Pod它们的关系
  6. C语言重要知识点回顾
  7. 【135天】尚学堂高淇Java300集视频精华笔记(74-76)
  8. python自动化之djangoform表单验证
  9. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
  10. redis整理の配置
  11. android widget ViewFlipper
  12. Android 视频直播的流程总览
  13. html添加到购物车飞入动画效果,加入购物车的动画效果
  14. 产品化机器学习的一些思考
  15. 源码分析mmc体系结构
  16. python爬取17000个球员_Python爬取NBA球员生涯数据及简单可视化
  17. VTK: 拾取方式的三种实现
  18. CSDN 空间:“迷你博客”很迷人(2)收藏
  19. Python蒙特卡罗法测圆周率
  20. 解决方案之Android 国际化资源完美兼容6.0,7.0,8.0

热门文章

  1. 使用mysql-proxy读写分离时的注意事项_mysql-proxy中Admin Plugin的使用以及读写分离的问题...
  2. 树莓派4b安装windows iot_树莓派4B基于python3安装opencv4全教程
  3. TikTok如何将粉丝转到私域,提高转化和复购?
  4. 跨境电商ERP是什么?
  5. HDU-1540 Tunnel Warfare 线段树最大连续区间 或 STL巧解
  6. 蓝桥杯 入门训练 A+B问题进阶版(两个3000位数的加法)
  7. CSS垂直居中的七个方法
  8. Logstash+Kibana+多ElasticSearch集群部署
  9. php如何进行界面切换,PHP 页面跳转到另一个页面的多种方法方法总结
  10. 单元格填充为0的html,Excel如何在数据信息表中把空单元格填写为数字“0”