mysql 游标嵌套
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 游标嵌套的更多相关文章
- mysql 存储过程 游标嵌套
基本表temp 包括 name, type, sendCity, getCity 分别对应物流送货司机名, 倒车的第几段, 发货城市, 收货城市 表结构 -- -------------------- ...
- MySQL 游标
概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...
- SqlServer和MySQL游标学习
一 sqlserver游标使用 /*** 游标的使用 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱. 使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1 ...
- MySQL 游标(PREPARE预处理语句)
概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...
- mysql游标的用法及作用
1当前有三张表A.B.C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中:常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条 ...
- MySQL实现嵌套集合模型
MySQL实现嵌套集合模型 译文主要是介绍如何用MySQL来存储嵌套集合数据.在其中会增加一些自己的理解,也会删除掉一些自认为无用的废话. 这篇文章主要讲的是嵌套集合模型,所以邻接表不是本文的重点,简 ...
- MySQL游标操作指南
本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下 测试表 level 代码如下: create table test.level (name varchar(20)); ...
- 个人笔记mysql游标
经过测试,mysql游标是无法读取自定义函数计算的结构,mysql自带的函数计算值是可以读取的.
- MySQL游标的简单实践
Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行 ...
随机推荐
- halcon之NCC匹配
NCC匹配 基于Normalized cross correlation(NCC)用来比较两幅图像的相似程度已经是一个常见的图像处理手段.在工业生产环节检测.监控领域对对象检测与识别均有应用.NCC算 ...
- ABR与ASBR区别
ABR 区域边界路由器 area border router 位于一个或多个OSPF区域边界上.将这些区域连接到主干网络的路由器.ABR被认为同时是OSPF主干和相连区域的成员.因此,它们同时维护着描 ...
- 教你如何让数据库支持emoji表情符存储
From: http://www.cnblogs.com/janehoo/archive/2016/04/06/5359800.html 一.教你如何让数据库支持emoji表情符存储 解决方式:更换字 ...
- open-falcon监控Flume
1.首先你需要知道flume的http监控端口是否启动 请参考博文 Flume的监控参数 即在 http://localhost:3000/metrics 可以访问到如下内容 2.在open-falc ...
- Groovy和Java互调
Scala和Java为静态语言,Groovy为动态语言 Scala: 函数式编程,同时支持面向对象 Groovy: jvm上的脚本,较好兼容java语法,Groovy加强了Java集成. 可配置化的优 ...
- hibernate中的addEntity setResultTransformer的比较
如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的.所以要手动调用addEntity(Class class)等一系列方法. 如session.createSQ ...
- python学习笔记(四)
模块与包 python模块,一个.py文件 导入模块的语法: import importable importable#可以是包或包中的模块 import importable1,....,impo ...
- iOS 库操作
目录 库操作 主工程和子工程的引用关系 库之间的引用关系 ar命令 nm命令 库操作 主工程和子工程的引用关系 子工程引用主工程中的文件需要在子工程的search path中加入头文件的目录 子工程引 ...
- puppet(5)-master/agent模式
master/agent模式的工作流程 agent每隔固定时长会向master端发送nodename(自己的节点名,节点名至关重要)和 facts ,并且向服务器端请求自己的catalog. mast ...
- 0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)
ppp拨号使gprs上网的同时如何和gprs模块进行at指令的交互,这是一个问题. 在linux中,ppp拨号上网是内核中支持的,只需要在内核配置中选上. ppp拨号的方式使gprs进行上网与at指令 ...