2012-04-24 3 views
1

J'ai une simple boucle while imbriquée dans la procédure stockée, mais cela donne une erreur. La boucle n'a rien de génial, juste pour l'apprentissage, j'ai créé deux boucles.Boucle imbriquée dans la procédure stockée mysql

delimiter $$ 
create procedure getSum(in input int , out output int) 
begin 

set output = 0; 
while input >= 1 do 

    declare tmp int default 1; 
    while tmp <= 5 do 
     set output = output + input ; 
     set tmp = tmp + 1; 
    end while ; 

set input = input - 1 ; 

end while; 

end $$ 
delimiter ; 

est Ci-dessous l'erreur

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'declare tmp int default 1; while tmp <= 5 do set output = output + inpu' at line 7

Merci.

Répondre

0

Essayez ceci:

delimiter $$ 
create procedure getSum(in input int , out output int) 
begin 
declare tmp int default 1; 
set output = 0; 
while input >= 1 do 

    set tmp = 1; 
    while tmp <= 5 do 
     set output = output + input ; 
     set tmp = tmp + 1; 
    end while ; 

set input = input - 1 ; 

end while; 

end $$ 
delimiter ; 
+0

ce qui était erroné avec mon code? Dois-je déclarer des variables locales à chaque fois comme ça? –

+0

J'ai déplacé 'declare' au début du bloc, et ajouté' set tmp = 1; 'pour être cohérent avec la valeur avec laquelle vous l'aviez initialisé. – Ryan

+0

Les variables locales sont définies par rapport à un bloc 'BEGIN ... END'. Habituellement, les définir au début du bloc élimine les erreurs comme celle-ci. Je pense que c'est une obligation de les définir en premier dans le bloc, comme dans les anciennes langues procédurales ... mais je peux me tromper. – Ryan

Questions connexes