Itulah batasannya.
Sekarang, solusinya:tambahkan BEGIN ... END
blokir.
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 $$
Semua variabel di blok luar masih dalam cakupan di blok dalam, kecuali variabel lain di blok dalam memiliki nama yang bertentangan.
HANDLER
di blok luar juga dalam cakupan untuk sinyal di blok dalam, kecuali penangan yang berkonflik dideklarasikan di sana, dalam hal ini penangan dalam akan menangkap pengecualian dan pegangan luar akan menangkap apa pun yang dilemparkan oleh penangan dalam, termasuk RESIGNAL
.
Beberapa tingkat bersarang diperbolehkan. Ukuran thread_stack
mungkin menjadi faktor, tetapi dokumentasinya tidak jelas. Saya telah menjalankan tumpukan utas 262.144 byte sejak sebelum dijadikan default, dan tidak pernah menemukan batasan.