Đó là hạn chế.
Bây giờ, giải pháp thay thế: thêm BEGIN ... END
lồng nhau khối.
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 $$
Tất cả các biến trong khối bên ngoài vẫn nằm trong phạm vi trong khối bên trong, trừ khi một biến khác trong khối bên trong có tên xung đột.
HANDLER
trong khối bên ngoài cũng nằm trong phạm vi cho các tín hiệu trong khối bên trong, trừ khi một trình xử lý xung đột được khai báo ở đó, trong trường hợp đó, trình xử lý bên trong sẽ bắt ngoại lệ và xử lý bên ngoài sẽ bắt bất cứ thứ gì do trình xử lý bên trong ném ra, bao gồm một RESIGNAL
.
Nhiều cấp độ lồng nhau được cho phép. Kích thước của thread_stack
có thể là một yếu tố, nhưng tài liệu không rõ ràng. Tôi đã chạy ngăn xếp luồng 262,144 byte kể từ trước khi nó được đặt làm mặc định và chưa bao giờ gặp phải giới hạn.