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. QT工程文件的条件编译选择与额外的编译参数配置

    QTCreator打开.pro工程文件后,依据不同的构建套件创建项目组.在项目组中,点开构建步骤的“详情”,增加一个自己的宏定义,比如: DEFINES+=IMX_287 然后,我们在.pro文件中添 ...

  2. Python学习小组微信群公告页面

    <简明 Python 教程>读经群,PDF地址:https://pan.baidu.com/s/1FK8s4cTfwWxSktOfS95ArQ,PyCharm-Edu地址:https:// ...

  3. 手机访问PC网站自动跳转到手机版

    随着智能手机的流行,4G时代来临,手机用户越来越多,在生活中甚至手机比电脑用的还多,当前开发的网站大都是PC和WAP版并存,但是很少有用户愿意去记住一个网站的两个端的不同域名,所以需要我们做一些设置, ...

  4. CentOS上安装配置Ruby on Rails

    0.install sublime editor(optional) ref:http://www.tecmint.com/install-sublime-text-editor-in-linux/ ...

  5. Java中excel转换为jpg/png图片 采用aspose-cells-18.6.jar

    一  Java中excel转换为jpg/png图片 package com.thinkgem.jeesite.modules.task.util; import com.aspose.cells.Im ...

  6. Ubuntu 18.04 Numix主题安装设置

    Ubuntu 18.04 Numix主题安装设置 一.首先安装Numix主题 展现效果如下图 1.安装numix sudo add-apt-repository ppa:numix/ppa 2.安装主 ...

  7. Golang知识图谱

    原:https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0?from=timeline 百度脑图重制:http://naotu.bai ...

  8. Nestjs 增加全局前缀

    文档 const app = await NestFactory.create(AppModule); app.setGlobalPrefix('v1'); // http://localhost:5 ...

  9. ajax里的status和readystate

    先看ajax封装函数 function ajaxFunc(method,url,data,callback) { var xhr; if (XMLHttpRequest) { xhr = new XM ...

  10. LeetCode 12 - 整数转罗马数字 - [简单模拟]

    题目链接:https://leetcode-cn.com/problems/integer-to-roman/ 题解: 把 $1,4,5,9,10,40,50, \cdots, 900, 1000$ ...