Dat is de beperking.
Nu de tijdelijke oplossing:voeg een geneste BEGIN ... END
toe blok.
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 $$
Alle variabelen in het buitenste blok zijn nog steeds binnen bereik in het binnenste blok, tenzij een andere variabele in het binnenste blok een tegenstrijdige naam heeft.
EEN HANDLER
in het buitenste blok is ook van toepassing op signalen in het binnenste blok, tenzij daar een conflicterende handler wordt aangegeven, in welk geval de binnenste handler de uitzondering opvangt en de buitenste hendel alles opvangt dat door de binnenste handler wordt gegooid, inclusief een RESIGNAL
.
Meerdere nestniveaus zijn toegestaan. De grootte van de thread_stack
kan een factor zijn, maar de documentatie is onduidelijk. Ik gebruik al 262.144 bytes thread-stacks sinds voordat het de standaard werd, en ben nog nooit een limiet tegengekomen.