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

thủ tục được lưu trữ mysql tự gọi đệ quy

nó chỉ hoạt động trong phiên bản mysql> =5

khai báo thủ tục được lưu trữ là cái này,

bạn có thể cải thiện nó một chút, nhưng điều này đang hoạt động:

DELIMITER $$

CREATE PROCEDURE calctotal(
   IN number INT,
   OUT total INT
)

BEGIN

   DECLARE parent_ID INT DEFAULT NULL ;
   DECLARE tmptotal INT DEFAULT 0;
   DECLARE tmptotal2 INT DEFAULT 0;

   SELECT parentid   FROM test   WHERE id = number INTO parent_ID;   
   SELECT quantity   FROM test   WHERE id = number INTO tmptotal;     

   IF parent_ID IS NULL
    THEN
    SET total = tmptotal;
   ELSE     
    CALL calctotal(parent_ID, tmptotal2);
    SET total = tmptotal2 * tmptotal;   
   END IF;

END$$

DELIMITER ;

cách gọi giống như (điều quan trọng là phải đặt biến này):

SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255; 

CALL calctotal(6, @total);
SELECT @total;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về CURRENT_TIMESTAMP - MySQL

  2. Hàm MySQL ACOS () - Trả về Arc Cosine của một số

  3. Cách kiểm tra kích thước của tất cả các bảng trong cơ sở dữ liệu trong MySQL

  4. Lỗi nghiêm trọng:Không có ngoại lệ 'mysqli_sql_exception' với thông báo 'Không có chỉ mục nào được sử dụng trong truy vấn / câu lệnh chuẩn bị'

  5. MySQL thêm ngày vào một ngày