BEGIN -- 开始存储过程
declare my_ID varchar(32); -- 线路id
declare my_SpecialLineName varchar(50); -- 线路名称
declare my_ParentID varchar(32); -- 父级id
declare BH varchar(32); -- 线路编号前缀
declare my_SpecialLineType varchar(50); -- 线路类型
declare my_LPID varchar(32); -- 站点父级id
declare my_Destination varchar(1024); -- 线路上级名称
declare Total_ids varchar(4000); -- 线路集合id
declare my_LID varchar(32); -- 站点id
declare my_ZD varchar(32); -- 站点
declare Total_id varchar(4000); -- 线路集合id
declare my_LPDestination varchar(1024); -- 站点父级
declare my_LSID varchar(32); -- 主表Id
DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false

DECLARE My_Cursor CURSOR FOR (SELECT ID,SpecialLineType,Destination FROM speciallinemanage WHERE ParentID = 0 AND Destination != "" AND (Destination NOT LIKE '%|%'));
DECLARE My_Cursor2 CURSOR FOR (SELECT ID,SpecialLineName,Destination FROM speciallinemanage WHERE ParentID = my_ID);
DECLARE My_Cursor3 CURSOR FOR (SELECT ZD FROM tmp_split);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true

OPEN My_Cursor; -- 打开游标
myLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到
FETCH My_Cursor into my_ID,my_Destination,my_SpecialLineType; -- 将游标当前读取行的数据顺序赋予自定义变量12
IF done THEN -- 判断是否继续循环
LEAVE myLoop; -- 结束循环
END IF;
SET @my_LPID = (SELECT AreaId FROM area WHERE AreaName = my_Destination AND AreaType = my_SpecialLineType);
SET @Total_ids = (SELECT GROUP_CONCAT(AreaId SEPARATOR '-') FROM area WHERE AreaType = my_SpecialLineType);
OPEN My_Cursor2; -- 打开游标
myLoop2: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到
FETCH My_Cursor2 into my_LSID,my_SpecialLineName,my_LPDestination; -- 将游标当前读取行的数据顺序赋予自定义变量12
IF done THEN -- 判断是否继续循环
LEAVE myLoop2; -- 结束循环
END IF;
IF(my_SpecialLineType ='1') THEN
SET @BH = 'ZH' + (10000 + N'SELECT CAST('+ my_LSID + ' AS SIGNED))');
ELSEIF(my_SpecialLineType ='2') THEN
SET @BH = 'GN' + (10000 + N'SELECT CAST('+ my_LSID + ' AS SIGNED))');
ELSE
SET @BH = 'CJ' + (10000 + N'SELECT CAST('+ my_LSID + ' AS SIGNED))');
END IF;
CALL splitString(my_LPDestination,'|');
-- linesetup
SET @Total_id = N'SELECT REPLACE('+@Total_ids +',' +@my_LPID +','')';
INSERT INTO `go_travel`.`linesetup`
(`KID`, `LineNum`, `LineName`, `LineType`, `ProvinceId`, `ProvinceName`, `Extend4`)
VALUES
(my_ID, @BH, my_SpecialLineName, my_SpecialLineType, @my_LPID, my_Destination,@Total_id);
OPEN My_Cursor3; -- 打开游标
myLoop3: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到
FETCH My_Cursor3 into my_ZD;
IF done THEN -- 判断是否继续循环
LEAVE myLoop3; -- 结束循环
END IF;
-- line
SET @my_LID = (SELECT AreaId FROM area WHERE AreaName = my_ZD AND AreaType = my_SpecialLineType);

INSERT INTO `go_travel`.`line`
(`LineSetUpId`, `PlaceId`, `PlaceName`, `PPlaceId`, `PPlaceName`, `Sort`)
VALUES
(my_ID, @my_LID, my_ZD, @my_LPID, my_Destination, my_ID);

END LOOP; -- 结束自定义循环体
CLOSE My_Cursor3; -- 关闭游标
SET done=FALSE; #这个很重要
END LOOP; -- 结束自定义循环体
CLOSE My_Cursor3; -- 关闭游标
SET done=FALSE; #这个很重要
END LOOP; -- 结束自定义循环体
CLOSE My_Cursor; -- 关闭游标
END

mysql 游标嵌套的更多相关文章

  1. mysql 存储过程 游标嵌套

    基本表temp 包括 name, type, sendCity, getCity 分别对应物流送货司机名, 倒车的第几段, 发货城市, 收货城市 表结构 -- -------------------- ...

  2. MySQL 游标

    概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...

  3. SqlServer和MySQL游标学习

    一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1 ...

  4. MySQL 游标(PREPARE预处理语句)

    概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...

  5. mysql游标的用法及作用

    1当前有三张表A.B.C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中:常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条 ...

  6. MySQL实现嵌套集合模型

    MySQL实现嵌套集合模型 译文主要是介绍如何用MySQL来存储嵌套集合数据.在其中会增加一些自己的理解,也会删除掉一些自认为无用的废话. 这篇文章主要讲的是嵌套集合模型,所以邻接表不是本文的重点,简 ...

  7. MySQL游标操作指南

    本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下   测试表 level  代码如下: create table test.level (name varchar(20)); ...

  8. 个人笔记mysql游标

    经过测试,mysql游标是无法读取自定义函数计算的结构,mysql自带的函数计算值是可以读取的.

  9. MySQL游标的简单实践

    Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行 ...

随机推荐

  1. 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其三)

    除了上一篇中提到的对字符串的字符替换操作,去掉Json中的转义符反斜杠\之外,还发现了更加简单的办法. 就是使用Newtownsoft.Json序列化Json时,将嵌套的Json对象(字符串)转为JO ...

  2. Linux系统时间同步方法小结

    在Windwos中,系统时间的设置很简单,界面操作,通俗易懂,而且设置后,重启,关机都没关系.系统时间会自动保存在BIOS时钟里面,启动计算机的时候,系统会自动在BIOS里面取硬件时间,以保证时间的不 ...

  3. 3.贝叶斯网络表示(The Bayesian Network Representation)

    对于一个n随机变量的联合分布,一般需要2**n-1个参数来表示这个分布.但是,我们可以通过随机变量之间的独立性,减少参数的个数. naive Beyes model: Bayesian Network ...

  4. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库03 —— 安装HAWQ 2.3.0.0

    一. HAWQ2.3.0环境准备[全部主机节点]: 1, vim /etc/sysctl.conf,编辑如下内容: kernel.shmmax= kernel.shmmni= kernel.shmal ...

  5. babel配置项目目录支持转换es6语法,引入非项目目录js后,引入Js转换无效

    我遇到了一个问题,我在已经配置babel的项目中通过require引入了一个项目目录外层的另一个js文件,前期是可以成功转换并打包的,但是到了后期就不行了,报错: 这个报错的意思是,引入的js文件中有 ...

  6. samba4.4security配置

    security=share在新版中已经被废弃了把security = share改为 security = user map to guest = Bad User 就可以了 [global] wo ...

  7. 用SUMIF对超15位的代码进行条件求和,出错了,原因是....

    用SUMIF对超15位的代码进行条件求和,出错了,原因是.... 2017-10-29 23:01 一.问题 有读者朋友问: 用SUMIF进行条件求和时,如果统计的条件是超15位的代码,就会出错,比如 ...

  8. Oracle 行列转置

    两种简单的行列转置 1.固定列数的行列转换如student   subject    grade--------- ---------- --------student1  语文       80st ...

  9. python nose测试框架全面介绍十二 ----用例执行顺序打乱

    在实际执行自动化测试时,发现我们的用例在使用同一个资源的操作时,用例的执行顺序对测试结果有影响,在手工测试时是完全没法覆盖的. 但每一次都是按用例名字来执行,怎么打乱来执行的. 在网上看到一个有意思的 ...

  10. gitlab+jenkins+tomcat war包部署(此文有新版本)

    对本文进行格式整理,url: https://www.cnblogs.com/huandada/p/9969234.html 整个项目的框架为: 1.gitlab的安装(Centos7) 新建/etc ...