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. 在Java路上,我看过的一些书、源码和框架(转)

    原文地址:http://www.jianshu.com/p/4a41ee88bd82 物有本末,事有终始,知所先后,则近道矣 面试经历 关于Java面试,你应该准备这些知识点关于Java面试,你应该准 ...

  2. FasterRCNN原理(转)

    在介绍Faster R-CNN之前,先来介绍一些前验知识,为Faster R-CNN做铺垫. 一.基于Region Proposal(候选区域)的深度学习目标检测算法 Region Proposal( ...

  3. Mysql优化-大数据量下的分页策略

    一.前言 通常,我们分页时怎么实现呢? 1 SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但是,数据量猛增以后呢? 1 SELECT * FROM t ...

  4. gsoap使用总结

    WebService.soap.gsoap基本概念 WebService服务基本概念:就是一个应用程序,它向外界暴露出一个可以通过web进行调用的API,是分布式的服务组件.本质上就是要以标准的形式实 ...

  5. Golang查缺补漏(一)

    Go语言高级编程(Advanced Go Programming) Go语言高级编程(Advanced Go Programming) golang都是传值,与其他语言不同的是数组作为参数时,也是传值 ...

  6. 哪个 Linux 内核版本号是 “稳定的”? | Linux 中国

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79329760 https://mmbi ...

  7. Kubernetes集群部署之五node节点部署

    Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet :负责pod对应的容器的创建.启停等任务 ...

  8. 【React + flask】跨域服务及访问

    Flask from flask import Flask , request from flask_cors import * import flask import json import pic ...

  9. 在windows下编写shell脚本

    注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...

  10. Python的循环导入问题

    循环导入的最好的解决方法是从架构上优化,即调整模块和模块成员变量的设计.一个好的原则是:可导出的成员变量,都不应该依赖于导入进来的成员变量. 但是在业务开发的过程中,总会遇到通过架构层面解决不了的导入 ...