Tôi biết bạn đã hỏi cụ thể cách thực hiện điều này mà không một biến do người dùng tạo - nhưng đối với những người khác bắt gặp điều này nghĩ rằng nên đăng cách thực hiện với một vì nó khá đơn giản:
CREATE PROCEDURE sp_recursive
BEGIN
// ... DECLAREs here
-- Set maximum recursion depth (max is 255)
SET @@SESSION.max_sp_recursion_depth = 10;
-- Increment current recursion depth
SET @recursion_depth = IFNULL(@recursion_depth + 1, 1);
-- ... More stored procedure code
-- Decrement current recursion depth. Note: Care must be taken to ensure this line
-- is *always* executed at the end of the stored procedure.
SET @recursion_depth = @recursion_depth - 1;
END
Giải thích
@recursion_depth
biến phạm vi phiên được tăng lên bởi SET
ở trên mỗi khi thủ tục được lưu trữ được nhập. Lần đầu tiên nó được nhập, biến chưa được khởi tạo nên có giá trị là NULL
- điều này được kiểm tra bởi IFNULL()
, chỉ định lại nó cho một trong trường hợp này. Khi kết thúc quy trình được lưu trữ ngay trước khi thoát, độ sâu cần được giảm bớt.
Ghi chú khác
Cần lưu ý rằng SQL Server không cung cấp @@NESTLEVEL
tích hợp sẵn để thực hiện những điều trên - nhưng tiếc là MySQL dường như không có biến tương đương.