Essa é a restrição.
Agora, a solução alternativa:adicione um
BEGIN ... END
aninhado bloquear. 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 $$
Todas as variáveis no bloco externo ainda estão no escopo do bloco interno, a menos que outra variável no bloco interno tenha um nome conflitante.
Um
MANIPULADOR
no bloco externo também está no escopo de sinais no bloco interno, a menos que um manipulador conflitante seja declarado lá; nesse caso, o manipulador interno capturará a exceção e o manipulador externo capturará qualquer coisa lançada pelo manipulador interno, incluindo um RESIGNAL
. Vários níveis de aninhamento são permitidos. O tamanho do
thread_stack
pode ser um fator, mas a documentação não é clara. Estou executando pilhas de threads de 262.144 bytes desde antes de se tornar o padrão e nunca encontrei um limite.