ตัวอย่างการสร้าง Stored Procedure คำนวณแฟกทอเรียล (n!) โดยใช้การเรียกซ้ำ (Recursion) ใน MySQL ต้องตั้งค่า max_sp_recursion_depth ก่อน
โค้ด Stored Procedure ทั้งหมด
DELIMITER //
CREATE PROCEDURE get_factorial(IN N INT)
BEGIN
SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@SESSION.max_sp_recursion_depth = 255;
CALL factorial_recursive(N, @factorial);
SELECT @factorial;
END //
CREATE PROCEDURE factorial_recursive(IN N INT, OUT factorial INT)
BEGIN
IF N = 1 THEN
SET factorial := 1;
ELSE
CALL factorial_recursive(N - 1, factorial);
SET factorial := N * factorial;
END IF;
END //
DELIMITER ;
การทดสอบ
mysql> CALL get_factorial(10); +--------------+ | @factorial | +--------------+ | 3628800 | +--------------+ mysql> CALL get_factorial(5); +-------------+ | @factorial | +-------------+ | 120 | +-------------+
คำอธิบาย:
max_sp_recursion_depth- ความลึกสูงสุดของการเรียกซ้ำ (Default = 0 = ปิด) ต้องตั้งให้มากพอสำหรับค่า N ที่ต้องการget_factorial- Procedure หลัก รับ N ส่งต่อให้ factorial_recursivefactorial_recursive- Procedure เรียกซ้ำ คำนวณ n! = n × (n-1)!- ใช้
OUT parameterส่งค่ากลับ
ข้อควรระวัง: Recursion ใน MySQL SP มีขีดจำกัดประสิทธิภาพและความลึก ไม่เหมาะกับค่า N ใหญ่มาก ควรพิจารณา Iterative Approach หรือคำนวณที่ Application Layer แทน