C'est la restriction.
Maintenant, la solution de contournement :ajoutez un BEGIN ... END
imbriqué bloquer.
DELIMITER $$
CREATE PROCEDURE ...
BEGIN
DECLARE ... INT ... -- variable
CREATE TEMPORARY TABLE... -- following the declarations, no more declarations allowed, unless...
BEGIN -- resets the scope, changes the rules, allows more declarations
DECLARE ... INT ... -- variables
DECLARE ... CURSOR ...
DECLARE CONTINUE HANDLER ...
OPEN ...
...
END;
END $$
Toutes les variables du bloc externe sont toujours dans la portée du bloc interne, à moins qu'une autre variable du bloc interne ait un nom en conflit.
Un HANDLER
dans le bloc externe est également dans la portée des signaux dans le bloc interne, à moins qu'un gestionnaire en conflit n'y soit déclaré, auquel cas le gestionnaire interne interceptera l'exception et le gestionnaire externe interceptera tout ce qui est lancé par le gestionnaire interne, y compris un RESIGNAL
.
Plusieurs niveaux d'imbrication sont autorisés. La taille de thread_stack
pourrait être un facteur, mais la documentation n'est pas claire. J'exécute des piles de threads de 262 144 octets depuis avant qu'il ne devienne la valeur par défaut et je n'ai jamais rencontré de limite.