2012-03-28 57 views
0
declare c int 
set c = 1 
while c<700 do 
update users set profile_display_name = concat(substring(first_name,1,1), last_name) 
     where profile_display_name is null and id between ((c-1)*10000+1) and (c*10000); 
SET c = c+1; 
End while ; 

我得到错误。近声明时结束声明。我在哪里犯错?MYSQL - 使用while循环更新

+0

我试过了,我来自SQL背景。我什么都猜不出。有任何建议吗? – pavelcc 2012-03-28 20:51:29

+0

你使用的是什么版本的MySQL? – 2012-03-28 20:58:16

+0

这段代码是触发器还是存储过程的一部分?你会得到什么错误? – 2012-03-28 21:07:49

回答

3

这个作品多为我

更好
DELIMITER $$ 

CREATE DEFINER=`ops`@`localhost` PROCEDURE `myproc`() 
BEGIN 
DECLARE c INT; 
SET c = 1; 
WHILE c < 700 DO 
SELECT CONCAT('Loop #:', c) ; 

update users 
set profile_display_name = concat(substring(first_name,1,1), last_name) 
where (profile_display_name is null or profile_display_name = '') 
and id between ((c-1)*10000+1) and (c*10000); 

commit; 

SET c=c+1; 

END WHILE; 
END 
2

下面是它是如何被定义为一个存储过程:

DELIMITER $$ 
CREATE PROCEDURE proc_name() 
BEGIN 

    DECLARE c int ;      --- added ; 
    SET c = 1 ;       --- added ; 
    WHILE c<700 DO 
     UPDATE users 
     SET profile_display_name = concat(substring(first_name,1,1), last_name) 
     WHERE profile_display_name IS NULL 
      AND id BETWEEN ((c-1)*10000+1) AND (c*10000); 
     SET c = c + 1 ; 
    END WHILE ; 

END $$ 
DELIMITER ; 
+0

做得很好。另外一个实际上帮助我更多的是SET c = c + 1之前的COMMIT语句; – pavelcc 2012-03-30 17:22:47