Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để có được độ sâu trong đệ quy thủ tục cửa hàng mysql?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt giá trị AUTOINCREMENT trong bảng django

  2. cách khôi phục cơ sở dữ liệu trong phpmyadmin sau khi gỡ cài đặt xampp

  3. Thay đổi múi giờ CURRENT_TIMESTAMP của Google Cloud SQL?

  4. JSON_SET () so với JSON_INSERT () so với JSON_REPLACE () trong MySQL:Sự khác biệt là gì?

  5. truy vấn php không chạy?