Das ist die Einschränkung.
Jetzt die Problemumgehung:fügen Sie einen verschachtelten BEGIN ... END
hinzu blockieren.
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 Variablen im äußeren Block sind im inneren Block immer noch gültig, es sei denn, eine andere Variable im inneren Block hat einen widersprüchlichen Namen.
Ein HANDLER
im äußeren Block ist auch im Gültigkeitsbereich für Signale im inneren Block, es sei denn, dort wird ein widersprüchlicher Handler deklariert. In diesem Fall fängt der innere Handler die Ausnahme ab und das äußere Handle fängt alles ab, was vom inneren Handler ausgelöst wird, einschließlich eines RESIGNAL
.
Mehrere Verschachtelungsebenen sind zulässig. Die Größe des thread_stack
könnte ein Faktor sein, aber die Dokumentation ist unklar. Ich habe 262.144-Byte-Thread-Stacks ausgeführt, bevor es zum Standard gemacht wurde, und bin nie auf ein Limit gestoßen.