2012-03-28 12 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は - 私はエラーを取得しています

+0

私はSQLの背景から来ました、試してみました。私は何も推測できませんでした。アドバイスはありますか? – pavelcc

+0

使用しているMySQLのバージョンは? –

+0

は、このコードは、トリガやストアドプロシージャの一部ですか?どのようなエラーが出ますか? –

答えて

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

うーん。 1つの追加は実際にSET C = c + 1の前にCOMMITステートメントがもっと助けになりました。 – pavelcc

関連する問題