Това е ограничението.
Сега заобиколното решение:добавете вложен BEGIN ... END
блок.
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 $$
Всички променливи във външния блок все още са в обхвата на вътрешния блок, освен ако друга променлива във вътрешния блок има противоречиво име.
HANDLER
във външния блок също е в обхвата на сигнали във вътрешния блок, освен ако там не е деклариран конфликтен манипулатор, в който случай вътрешният манипулатор ще улови изключението, а външният манипулатор ще улови всичко, хвърлено от вътрешния манипулатор, включително ПОДАВА ОСТАВКА
.
Разрешени са множество нива на влагане. Размерът на thread_stackкод>
може да е фактор, но документацията е неясна. Работя със стекове от нишки от 262 144 байта отпреди да станат стандартни и никога не съм срещал ограничение.