2012-03-28 5 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 ; 

Ich bekomme Fehler. nahe deklarieren und beenden while-Anweisung. Wo mache ich Fehler?MYSQL - Update mit While-Schleife

+0

Ich versuchte, ich bin von SQL-Hintergrund. Ich konnte nichts erraten. Irgendwelche Ratschläge? – pavelcc

+0

Welche Version von MySQL verwenden Sie? –

+0

Ist dieser Code Teil eines Triggers oder einer gespeicherten Prozedur? Welchen Fehler bekommst du? –

Antwort

3

Das ist für mich viel besser funktioniert

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

Hier ist, wie es als eine gespeicherte Prozedur definiert werden würde:

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

Schön gemacht. Eine Hinzufügung hat mir tatsächlich mehr geholfen, ist eine COMMIT-Anweisung vor SET c = c + 1; – pavelcc