关闭

MySQL存储过程及游标

标签: mysql存储数据库
620人阅读 评论(0) 收藏 举报
分类:

上个星期风风火火地学了下存储过程及游标,发现有一些细节容易忽略,在此做出一些标注,也希望能够给学习的人一些指导。


我所要做的是将连续地址进行拆分,比如address“环庆中路321弄1-30号”,目标是将其拆成“环庆中路321弄1号”,“环庆中路321弄2号”,“环庆中路321弄3号”等等。首先我将地址拆分为road“环庆中路321弄”,front“1”,behind“30”几个片段。然后建立一张新表,进行循环插入,过程如下。


#原表如下
#id     road            front    behind     isodd
#1      爱特路185弄      1         30        NULL
#2      长宁路           255       259        Y
#创建循环插入的表
drop table if exists test;
CREATE table test(id int,address varchar(255));
#创建存储过程
DROP PROCEDURE IF EXISTS proc;
DELIMITER //
CREATE PROCEDURE proc()
#declare必须放在begin和end之间
BEGIN
#内置循环标签
DECLARE inid INT DEFAULT 1;
#外部循环标签
DECLARE iid INT DEFAULT 0;

#isodd为是否单数,“是”为“Y”,"否"为“NULL”,定义变量
DECLARE rid VARCHAR(255);
DECLARE rroad VARCHAR(255);
DECLARE rfront INT;
DECLARE rbehind INT;
DECLARE risodd varchar(255);
#定义越界标签,默认为1
DECLARE done INT DEFAULT 1;
#定义游标
DECLARE getinfo CURSOR FOR SELECT id,road,front,behind,isoddFROM test1;
#定义越界,设置标签为0
DECLARE exit HANDLER FOR NOT FOUND SET done = 0;
#打开游标
OPEN getinfo;
#当越界标签为默认1时一直循环,或者可以利用repeat先循环再判断,两种循环没有多大差别
WHILE done = 1 DO
#将游标获取的值放进定义的变量当中
FETCH getinfo INTO rid,rroad,rfront,rbehind,risodd;
#外部循环每次增加,会把front赋值给iid,利用iid进行内部循环
SET inid =inid +1;
SELECT rfront INTO iid;
#当iid<behind时开始内部循环,将id,拼接road和iid和“号”的地址传送给test
WHILE iid<=rbehind DO
INSERT INTO test SELECT rid,concat(rroad,iid,"号");
#如果isodd为空,则内部循环每次加1,否则加2
IF risodd IS NULL THEN
SET iid =iid +1;
ELSE
SET iid =iid +2;
#结束if判断
END IF;
#结束内部循环
END WHILE;
#结束外部循环
END WHILE;
#关闭游标
CLOSE getinfo;
#结束存储过程
END//


delimiter ;
CALL proc();


0
0
查看评论

【MySQL】存储过程、游标、循环简单实例

简单粗暴的 mysql 存储过程游标使用教学,包教包会一秒五行(噢呵呵呵好像暴露了些什么)
  • u011704894
  • u011704894
  • 2016-04-22 20:48
  • 16489

Mysql存储过程循环内嵌套使用游标示例

 BEGIN  -- 声明变量  DECLARE v_addtime_begin varchar(13);  DECLARE v_addtime_end varchar(13);  DECLARE v_borrow_id int;  ...
  • yangshijin1988
  • yangshijin1988
  • 2014-07-31 20:35
  • 1015

mysql存储过程 --游标的使用 取每行记录 (多字段)

delimiter $ create PROCEDURE phoneDeal() BEGIN DECLARE id varchar(64); -- id DECLARE phone1 varchar(16); -- phone DECLARE passw...
  • zb0567
  • zb0567
  • 2017-02-12 21:08
  • 634

MYSQL存储过程&循环&游标&IF$CASE

测试用表SET FOREIGN_KEY_CHECKS=0;-- ---------------------------- -- Table structure for stu -- ---------------------------- DROP TABLE IF EXISTS `stu`; CR...
  • qq_26824159
  • qq_26824159
  • 2017-04-21 11:07
  • 396

mysql存储过程和游标遍历

DELIMITER $$ CREATE PROCEDURE alarm_replay_insert_procedure() BEGIN -- 定义变量 DECLARE _nowTime DATETIME; DECLARE _id INT; DECLARE _name VARCHA...
  • jianfpeng241241
  • jianfpeng241241
  • 2016-07-18 11:01
  • 735

mysql存储过程使用游标

1、游标的作用及属性游标的作用就是用于对查询数据库所返回的数据集进行遍历,以便进行相应的操作;游标有下面这些属性:a、游标是只读的,也就是不能更新它;b、游标是不能滚动的,也就是只能在一个方向上进行遍历,不能在记录之间随意进退,不能跳过某些记录;c、避免在已经打开游标的表上更新数据。 d、mysql...
  • JQ_AK47
  • JQ_AK47
  • 2016-08-20 16:04
  • 1606

Mysql存储过程使用多个游标的处理

Mysql存储过程使用多个游标的处理定义数据库表DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT...
  • RO_wsy
  • RO_wsy
  • 2016-04-14 11:22
  • 5415

mysql 游标和存储过程练习

BEGIN     declare teamId,userId int default 0;       declare done int default -1;           ...
  • qwangwei1231
  • qwangwei1231
  • 2014-11-06 17:52
  • 1497

存储过程(1)mysql中游标的使用

CREATE PROCEDURE `test`.`new_procedure` () BEGIN -- 需要定义接收游标数据的变量    DECLARE a CHAR(16);   -- 游标   DECLARE cur CURSOR FOR SELE...
  • BestDD
  • BestDD
  • 2015-10-13 14:07
  • 572

Mysql 存储过程游标的使用

存储过程创建: CREATE PROCEDURE `proc_cursor_test`() BEGIN #声明接收变量 declare v_id int(11); declare v_unit_name varchar(30); #游标变量 DECLARE done INT DEFAUL...
  • hzw2312
  • hzw2312
  • 2017-05-26 08:44
  • 519
    个人资料
    • 访问:46157次
    • 积分:799
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:9篇
    • 译文:0篇
    • 评论:11条
    我的QQ
    963570357
    最新评论