Det är begränsningen.
Nu, lösningen:lägg till en kapslad BEGIN ... END
blockera.
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 $$
Alla variabler i det yttre blocket är fortfarande inom omfånget i det inre blocket, såvida inte en annan variabel i det inre blocket har ett namn i konflikt.
En HANDLER
i det yttre blocket finns också utrymme för signaler i det inre blocket, om inte en motstridig hanterare deklareras där, i vilket fall den inre hanteraren kommer att fånga undantaget och det yttre handtaget kommer att fånga allt som kastas av den inre hanteraren, inklusive en RESIGNAL
.
Flera häckningsnivåer är tillåtna. Storleken på thread_stack
kan vara en faktor, men dokumentationen är otydlig. Jag har kört 262 144 byte trådstackar sedan innan det blev standard och har aldrig stött på en gräns.