Stored procedure đệ quy là thủ tục tự gọi chính nó (recursion). MySQL giới hạn độ sâu đệ quy mặc định = 0 để tránh lỗi stack overflow, treo server.
Kiểm tra giới hạn:
mysql> SHOW VARIABLES LIKE '%recur%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_sp_recursion_depth | 0 | +------------------------+-------+
Tăng giới hạn (tối đa 255):
mysql> SET @@GLOBAL.max_sp_recursion_depth = 255; Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE '%recur%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | max_sp_recursion_depth | 255 | +------------------------+-------+
Có thể set trong session hoặc trong thân thủ tục. Giới hạn bảo vệ server khỏi đệ quy vô tận/quá sâu.