ใช้ CREATE TEMPORARY TABLE ภายใน Stored Procedure ตารางจะหายเมื่อ Session จบ
ไวยากรณ์
CREATE PROCEDURE yourProcedureName()
BEGIN
CREATE TEMPORARY TABLE yourTemporaryTableName SELECT yourValue;
END
ตัวอย่างครบถ้วน
1. สร้าง Procedure สร้าง Temp Table
mysql> DELIMITER //
mysql> CREATE PROCEDURE create_Temporary_Table()
-> BEGIN
-> CREATE TEMPORARY TABLE tmpDemoTable SELECT 500;
-> END//
Query OK, 0 rows affected (0.15 sec)
2. สร้าง Procedure แทรกข้อมูลเพิ่ม
mysql> CREATE PROCEDURE insert_Record_InTempTable()
-> BEGIN
-> INSERT INTO tmpDemoTable VALUES (300);
-> END//
Query OK, 0 rows affected (0.06 sec)
mysql> DELIMITER ;
3. เรียกใช้งาน
mysql> CALL create_Temporary_Table(); mysql> CALL insert_Record_InTempTable();
ผลลัพธ์
+-----+ | 500 | +-----+ | 500 | | 300 | +-----+
คุณสมบัติ Temporary Table
- มองเห็นได้เฉพาะ Session ที่สร้าง (Connection อื่นไม่เห็น)
- หายอัตโนมัติเมื่อจบ Session หรือ
DROP TEMPORARY TABLE - ชื่อสามารถซ้ำกับตารางปกติได้ (Scope แยกกัน)
- ไม่ทำให้เกิด Lock บนตารางปกติ
ใช้งานจริง: Complex Query สับซ้อน
CREATE PROCEDURE complex_report()
BEGIN
CREATE TEMPORARY TABLE tmp_sales AS
SELECT product_id, SUM(qty) AS total_qty FROM sales GROUP BY product_id;
CREATE TEMPORARY TABLE tmp_inventory AS
SELECT product_id, stock FROM inventory;
SELECT s.product_id, s.total_qty, i.stock
FROM tmp_sales s JOIN tmp_inventory i USING (product_id);
DROP TEMPORARY TABLE tmp_sales, tmp_inventory;
END