MySQL การประยุกต์ใช้งาน Stored Procedure กับระบบจริง

ในโลกของระบบฐานข้อมูลจริง ๆ Stored Procedure มักถูกใช้ในกรณีต่าง ๆ ดังต่อไปนี้

  • ต้องจัดการข้อมูลหลายตารางพร้อมกัน
  • ต้องทำงานแบบมีเงื่อนไขซับซ้อน
  • ต้องลดความซ้ำซ้อนของคำสั่ง SQL
  • ต้องทำงานซ้ำ ๆ เป็น routine เช่น ปิดยอดรายวัน

ในบทความนี้ผมจะยกตัวอย่างสถานการณ์จริงให้เห็นว่า Stored Procedure ช่วยให้งานเหล่านี้เป็นระบบและง่ายขึ้นได้อย่างไร มาดูกันครับ

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1 สรุปยอดขายรายวัน

ระบบร้านค้าต้องการคำนวณยอดขายของแต่ละวัน แล้วเก็บเข้าอีกตารางเพื่อใช้ทำรายงาน

สมมติว่าเรามีตารางและข้อมูลดังต่อไปนี้

ตาราง sales

sale_idamountsale_date
1100.002024-04-10
2250.002024-04-10
380.002024-04-11

ตาราง daily_summary

summary_datetotal_sales
2024-04-10350.00
2024-04-1180.00

สร้าง Stored Procedure

SQL
DELIMITER //

CREATE PROCEDURE summarize_daily_sales(IN summary_date DATE)
BEGIN
  DECLARE total DECIMAL(10,2);

  SELECT SUM(amount)
  INTO total
  FROM sales
  WHERE sale_date = summary_date;

  INSERT INTO daily_summary(summary_date, total_sales)
  VALUES (summary_date, IFNULL(total, 0));
END //

DELIMITER ;

เรียกใช้งาน

SQL
CALL summarize_daily_sales('2024-04-10');

ตัวอย่างที่ 2 อัปเดตสถานะออเดอร์ และตัด stock พร้อมกัน

เมื่อมีการยืนยันออเดอร์ เราอาจต้องการทำงานดังต่อไปนี้

  1. เปลี่ยนสถานะออเดอร์
  2. ลดจำนวนสินค้าในคลัง
  3. เพิ่มข้อมูล log

สมมติว่าเรามีตาราง 2 ตารางคือ orders และ products

สร้าง Stored Procedure

SQL
DELIMITER //

CREATE PROCEDURE process_order(IN p_order_id INT, IN p_product_id INT, IN qty INT)
BEGIN
  UPDATE orders
  SET status = 'confirmed'
  WHERE order_id = p_order_id;

  UPDATE products
  SET quantity = quantity - qty
  WHERE product_id = p_product_id;

  INSERT INTO order_logs(order_id, log_text, log_time)
  VALUES (p_order_id, 'Order confirmed and stock updated', NOW());
END //

DELIMITER ;

เรียกใช้งาน

SQL
CALL process_order(101, 201, 2);

เห็นได้ว่า Stored Procedure สามารถนำไปใช้งานกับระบบจริงได้หลากหลาย ไม่ว่าจะเป็น

  • การสรุปข้อมูลเพื่อทำรายงาน
  • การจัดการข้อมูลหลายตารางแบบอัตโนมัติ
  • การลดซ้ำซ้อนในการเขียน SQL

ทั้งหมดนี้จะช่วยให้ระบบของเราเป็นระเบียบ ปลอดภัย และง่ายต่อการดูแลในระยะยาว

แชร์เรื่องนี้