เมื่อต้องการเก็บข้อมูลชั่วคราวระหว่างการทำงานของ Stored Procedure โดยไม่ต้องบันทึกลงในตารางจริง Temporary Table (ตารางชั่วคราว) คือเครื่องมือที่ตอบโจทย์ที่สุด เหมาะกับการประมวลผลข้อมูลแบบหลายขั้นตอน เช่นการจัดกลุ่ม, การกรอง, หรือการคำนวณก่อนส่งผลลัพธ์กลับ
Temporary Table คืออะไร?
Temporary Table หรือ “ตารางชั่วคราว” คือ ตารางที่ถูกสร้างขึ้นเฉพาะใน session ปัจจุบัน และจะถูกลบอัตโนมัติเมื่อจบการเชื่อมต่อ (session)
ประโยชน์ของ Temporary Table
- เก็บข้อมูลชั่วคราวระหว่างคำนวณ
- ลดความซับซ้อนของ SQL Query หลัก
- เพิ่มประสิทธิภาพระบบ โดยลดการ join/query ซ้ำ
- ข้อมูลไม่ถาวร ปลอดภัย ลบทิ้งอัตโนมัติ
- เหมาะกับ Stored Procedure, Cursor, และ Loop
- ใช้งานสะดวกในระบบวิเคราะห์และ ETL
- ไม่กระทบข้อมูลจริง เหมาะกับงานทดสอบ
วิธีสร้าง Temporary Table ใน Stored Procedure
เราสามารถใช้คำสั่ง CREATE TEMPORARY TABLE ได้ทันทีภายใน Stored Procedure
รูปแบบคำสั่ง
CREATE TEMPORARY TABLE temp_table_name (
column1 datatype,
column2 datatype,
...
);
ตัวอย่าง: สร้าง Temporary Table เพื่อเก็บยอดขายรายวัน
สมมุติว่าเราต้องการดึงยอดขายของแต่ละวัน จากนั้นนำไปประมวลผลต่อ เช่น สรุปวันขายสูงสุด หรือเก็บไว้ก่อนส่งกลับ
โครงสร้างตาราง sales
| sale_id | sale_date | amount |
|---|---|---|
| 1 | 2024-04-10 | 100.00 |
| 2 | 2024-04-10 | 250.00 |
| 3 | 2024-04-11 | 80.00 |
Stored Procedure
SQL
DELIMITER //
CREATE PROCEDURE analyze_daily_sales()
BEGIN
-- สร้างตารางชั่วคราวเพื่อเก็บยอดขายรวมต่อวัน
CREATE TEMPORARY TABLE IF NOT EXISTS temp_daily_sales (
sale_date DATE,
total_amount DECIMAL(10,2)
);
-- เติมข้อมูลยอดขายรวมลงตารางชั่วคราว
INSERT INTO temp_daily_sales (sale_date, total_amount)
SELECT sale_date, SUM(amount)
FROM sales
GROUP BY sale_date;
-- แสดงผลจากตารางชั่วคราว
SELECT * FROM temp_daily_sales;
-- ตารางนี้จะถูกลบอัตโนมัติเมื่อ session จบ
END //
DELIMITER ;CREATE TEMPORARY TABLEสร้างตารางชั่วคราวที่มีอายุอยู่แค่ใน session นี้IF NOT EXISTSป้องกัน error หากมี temp table ชื่อเดียวกันอยู่ก่อนแล้วsale_date, total_amountคอลัมน์ที่เราจะเก็บข้อมูลจากการสรุปยอดINSERT INTO ... SELECTสรุปยอดขายจากตารางsalesแล้วเก็บลง temp tableSELECT *แสดงผลเพื่อดูว่าข้อมูลใน temp table ถูกต้องหรือไม่
ผลลัพธ์
| sale_date | total_amount |
|---|---|
| 2024-04-10 | 350.00 |
| 2024-04-11 | 80.00 |
ข้อควรระวังในการใช้ Temporary Table
- Temporary Table จะอยู่แค่ใน session เดียวกันเท่านั้น
- ไม่สามารถใช้ร่วมกันระหว่างผู้ใช้หรือ Connection ได้
- ถ้าจะสร้างชื่อเดียวกันหลายครั้ง ควรใช้
DROP TEMPORARY TABLE IF EXISTSก่อน หรือใช้IF NOT EXISTS