标签: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之后程序正常运行,顺利改名
标签:div 后台 工程师 and 游标 state 存在 引用 结果
原文地址:http://www.cnblogs.com/zo11o/p/7137009.html