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. 科普知识普及 - 桥接VS中继

    首先要说明一个很多人理解的误区,中继比桥接好用,真的是这么回事么? 答案是否定的. 我们在说桥接和中继的时候我们要先了解,桥接和中继的工作原理.还有一个问题,估计很多人都想不明白:为什么中继搜到的信号 ...

  2. 物联网系统与CoAP之Hello,World

    物联网系统与CoAP Hello,World 关于CoAP与物联网系统我们在上一篇中(ps:CoAP与物联网系统)中做一个简单的介绍,接着我们便開始试试CoAP协议的应用 CoAP应用 開始之前我们须 ...

  3. NO.1 hadoop简介

    第一次接触这个时候在网上查了很多讲解,以下很多只是来自网络. 1.Hadoop (1)Hadoop简介    Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层 ...

  4. React Native常用组件之ListView

    1. ListView常用属性 ScrollView 相关属性样式全部继承 dataSource ListViewDataSource 设置ListView的数据源 initialListSize n ...

  5. 微信小程序开发填坑指南V1

    近期用了一星期的时间,开发了一个小程序.小程序名称是:小特Jarvis,取自钢铁侠的管家. 后台采用C#编写,WebAPI接口.其实开发时间并不多,小程序本身提供的API,相比公众号的API来说,已经 ...

  6. github控件地址

    地址: https://github.com/wasabeef/awesome-android-ui http://www.jcodecraeer.com/plus/list.php?tid=31 h ...

  7. Web重温系列(二):SQLite+EF6实现本地化存储

    本来我们的产品有着复杂的层次结构,作为客户端的C# WinForm是不操作数据库的.但是最近有个需求,需要将数据本地保存.可选的方案很多,比如文本文件或者XML序列化和反序列化,或者如access.d ...

  8. Docker-堆栈stack(6)

    堆栈(Stack)的概念: 堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起.单个堆栈能够定义和协调整个应用程序的功能,但是非常复杂的应用程序可能希望使用多个堆栈. 下面我们就开始 ...

  9. array_walk与array_map的区别

    1.array_walk是用于用户自定义的函数,所以想用array_walk($aIds, "trim");去掉数据元素中的空格是达不到目的的只能用array_walk($aIds ...

  10. apache 2.4.23 只能本地访问,其他用户不能访问,提示You don't have permission to access

    这个版本的httpd.conf的配置方法跟原版本的设置不一样了. 需要在目录安全配置中 修改为 Require all granted 比如  把Require local 修改为Require al ...