Dynamic SQL ใน Stored Procedure ด้วย PREPARE STATEMENT
เมื่อต้องการสร้างและรันคำสั่ง SQL แบบไดนามิกภายใน Stored Procedure ใช้ PREPARE, EXECUTE, DEALLOCATE PREPARE
ตัวอย่าง
CREATE TABLE DemoTable2033 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20)
);
INSERT INTO DemoTable2033 (Name) VALUES
('Chris'), ('Bob'), ('David'), ('Mike');
DELIMITER //
CREATE PROCEDURE dynamic_query()
BEGIN
SET @query = CONCAT('SELECT * FROM DemoTable2033 WHERE Id = 3');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
CALL dynamic_query();
ผลลัพธ์
| Id | Name |
|---|---|
| 3 | David |
ขั้นตอนสำคัญ:
SET @query = ...สร้างคำสั่ง SQL เป็นสตริงPREPARE stmt FROM @queryคอมไพล์คำสั่งEXECUTE stmtรันคำสั่งDEALLOCATE PREPARE stmtปล่อยทรัพยากร (สำคัญมากเพื่อป้องกัน Memory Leak)
การประยุกต์: สามารถสร้างคำสั่ง SQL แบบไดนามิกจากพารามิเตอร์ที่ส่งเข้ามาได้