码迷,mamicode.com
首页 > 数据库 > 详细

Mysql 游标在数据库当中引用

时间:2017-07-08 16:14:34      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:div   后台   工程师   and   游标   state   存在   引用   结果   

  本人由于在某互联网公司担任后台开发工程师,但是公司基础数据较多,而且较为复杂。

  所以在开发前期就开发使用excel表格导入基础数据,但是由于前期对业务了解,在书写导入程序时原厂物料名称没有在名称后面加入 ‘-原厂’ 字样,经实际操作发现后立即修改程序;

  但是在此期间导入数据都未脏数据,为避免重复操作,使用了数据库右边批量处理检索结果。

  以下为游标使用实例。

 1 DROP PROCEDURE IF EXIEST re_name()
 2 CREATE PROCEDURE re_name()
 3 begin
 4     DECLARE s_did int(11);
 5     DECLARE s_dname VARCHAR(80);
 6     DECLARE stop int DEFAULT 0;
 7     -- DECLARE fname VARCHAR(80);
 8     DECLARE cur cursor for select did,dname from db_fittings where dQuality = 原厂 AND dname NOT LIKE %原厂% ;
 9     declare CONTINUE HANDLER FOR SQLSTATE 02000 SET stop = null;
10     OPEN cur;
11 FETCH cur INTO s_did,s_dname;
12     WHILE ( stop is not null ) DO 
13     update `db_fittings` set `dname` = CONCAT(s_dname,-原厂) WHERE `did` = s_did;
14     FETCH cur INTO s_did,s_dname;
15     END WHILE;
16 CLOSE cur;
17 end

  以下解释上面代码作为记录:

  首行如果存在就删除存储过程re_name();

  创建存储过程re_name();

  声明局部变量;

  声明游标;游标的使用和变量相同需要先声明:DECLARE cur cursor for select did,dname from db_fittings where dQuality = ‘原厂‘ AND dname NOT LIKE ‘%原厂%‘ ;

  以下申明在查询出现异常是停止跳出循环:declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET stop = null;

  在使用右边之前需要打开游标:open cur

  使用FETCH 讲查询出来的结果赋予临时变量:FETCH cur INTO s_did,s_dname

  然后再处理使用WHILE DO 循环处理游标查询结果

  关闭游标。

  结算存储过程。

 

  在书写过程中遇到的问题

  原数据库字段长度32 不够长会导致出现 data too long for column ‘dname‘ at row 1 错误,再讲长度32改为60之后程序正常运行,顺利改名

Mysql 游标在数据库当中引用

标签:div   后台   工程师   and   游标   state   存在   引用   结果   

原文地址:http://www.cnblogs.com/zo11o/p/7137009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!