To jest ograniczenie.
Teraz obejście:dodaj zagnieżdżony BEGIN ... END
blokować.
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 $$
Wszystkie zmienne w bloku zewnętrznym są nadal objęte zakresem w bloku wewnętrznym, chyba że inna zmienna w bloku wewnętrznym ma sprzeczną nazwę.
OBSŁUGA
w bloku zewnętrznym jest również w zakresie sygnałów w bloku wewnętrznym, chyba że jest tam zadeklarowana procedura obsługi powodująca konflikt, w którym to przypadku wewnętrzna procedura obsługi przechwyci wyjątek, a zewnętrzny uchwyt przechwyci wszystko, co zostanie wyrzucone przez wewnętrzną procedurę obsługi, w tym RESIGNAL
.
Dozwolonych jest wiele poziomów zagnieżdżenia. Rozmiar thread_stack
może być czynnikiem, ale dokumentacja jest niejasna. Używam 262,144 bajtowych stosów wątków, zanim stało się to domyślne i nigdy nie napotkałem limitu.