2012-03-28 52 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