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

Je reçois une erreur. près de déclarer et se terminer tout en déclaration. où suis-je en train de me tromper?MYSQL - Mise à jour en utilisant la boucle while

+0

J'ai essayé, je suis d'origine SQL. Je ne pouvais rien deviner. Un conseil? – pavelcc

+0

Quelle version de MySQL utilisez-vous? –

+0

Ce code fait-il partie d'un déclencheur ou d'une procédure stockée? Quelle erreur obtenez-vous? –

Répondre

3

Cela fonctionne beaucoup mieux pour moi

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

Voilà comment il serait défini comme une procédure stockée:

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

Bien fait. Un ajout m'a aidé plus est une instruction COMMIT avant SET c = c + 1; – pavelcc

Questions connexes