Skip to main content
0
ไม่มีหมวดหมู่

เข้าใจการเขียน Stored Procedure แบบง่าย ๆ

กลับมาอีกครั้งกับคอนเทนต์สำหรับพื้นฐานการจัดการฐานข้อมูล โดยวันนี้เราจะมาอยู่กับอีกเรื่องที่ต้องรู้ที่จะทำให้เราสามารถใช้งานใช้ประโยชน์กับ Relational Database ได้ง่ายขึ้น

โดย Stored Procedure เป็นเหมือนเราเขียน SQL ดองไว้ แล้วตอนที่เราจะใช้คิวรีที่เขียนไว้เราก็จะเรียกใช้งาน โดยใช้คำสั่ง CALL ซึ่งความหมายตรงตัวมาก ทำแบบนี้ทำให้เราสามารถคิวรีได้สะดวกมาก ๆ ถึงแม้ตารางเราจะเยอะมาก คิวรีซับซ้อนสุด ๆ ทำให้หยุดปัญหาต้องมานั่งเขียนคิวรียาว ๆ ใหม่ในทุก ๆ รอบ

มันใช้ยังไง? 💻

ก่อนอื่นเราจะต้องมีฐานข้อมูลก่อน โดยในตัวอย่างนี้ผมใช้เป็น MySQL ยกตัวอย่างจากระบบ ERP แบบง่าย ๆ สมมติว่าเป็นบริษัทผลิตและขายสมาร์ทโฟนนะครับ หากเรามีฐานข้อมูลแล้ว ให้เราทำการสร้างตารางดังนี้

1. สร้างตารางที่จำเป็น

CREATE TABLE Products (
    ProductID INT PRIMARY KEY IDENTITY(1,1),
    ProductName NVARCHAR(100),
    StockQuantity INT,
    Price DECIMAL(10,2)
);

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY IDENTITY(1,1),
    OrderDate DATETIME,
    CustomerID INT,
    TotalAmount DECIMAL(10,2)
);

CREATE TABLE OrderDetails (
    OrderDetailID INT PRIMARY KEY IDENTITY(1,1),
    OrderID INT,
    ProductID INT,
    Quantity INT,
    UnitPrice DECIMAL(10,2)
);

2. เติมข้อมูลลงฐานข้อมูล

-- เพิ่มข้อมูลในตาราง Products
INSERT INTO Products (ProductName, StockQuantity, Price) VALUES 
('สมาร์ทโฟน รุ่น A', 100, 9999.99),
('สมาร์ทโฟน รุ่น B', 150, 14999.99),
('สมาร์ทโฟน รุ่น C', 80, 19999.99),
('หูฟังไร้สาย', 200, 2999.99),
('แท่นชาร์จไร้สาย', 120, 1499.99);

-- เพิ่มข้อมูลในตาราง Orders
INSERT INTO Orders (OrderDate, CustomerID, TotalAmount) VALUES 
(GETDATE(), 1, 9999.99),
(DATEADD(DAY, -1, GETDATE()), 2, 17999.98),
(DATEADD(DAY, -2, GETDATE()), 3, 23999.97);

-- เพิ่มข้อมูลในตาราง OrderDetails
INSERT INTO OrderDetails (OrderID, ProductID, Quantity, UnitPrice) VALUES 
(1, 1, 1, 9999.99),
(2, 2, 1, 14999.99),
(2, 4, 1, 2999.99),
(3, 3, 1, 19999.99),
(3, 5, 2, 1499.99);

3. ใช้งาน Stored Procedure

ก่อนเริ่มใช้งานเราต้องรู้จัก Syntax ของมันก่อนนน โดยสำหรับการสร้าง PROCEDURE จะมีรูปแบบดังนี้

CREATE PROCEDURE ชื่อ_procedure()
BEGIN
    -- คำสั่ง SQL ของเรา
END;

จากตารางที่เราสร้างกันมา เราสามารถสร้าง Stored Procedure เพื่อเพิ่มข้อมูลในตาราง Products ได้โดยเขียนแบบนี้

DELIMITER //

CREATE PROCEDURE AddProduct(
    IN productName VARCHAR(255),
    IN stockQuantity INT,
    IN price DECIMAL(10,2)
)
BEGIN
    INSERT INTO Products (ProductName, StockQuantity, Price) VALUES (productName, stockQuantity, price);
END //

DELIMITER ;

สร้างเสร็จเราก็จะต้องเรียกใช้งานใช่มั้ยครับ ตอนเรียกเราก็ CALL มาด้วยชื่อ Procedure แล้วถ้ามันต้องใส่ค่าพารามิเตอร์ เราก็ระบุเข้าไปได้เลย

CALL AddProduct('สมาร์ทโฟน รุ่น D', 50, 12999.99);

ตัวอย่างการเพิ่มเข้าไปแล้วเรามาดูตัวอย่างของการแก้ไขและลบ Stored Procedure กันต่อ โดยสำหรับการแก้ไข Stored Procedure เราจะต้องลบของเก่าก่อนแล้วค่อยสร้างของใหม่นะครับ

DROP PROCEDURE IF EXISTS AddProduct;

CREATE PROCEDURE AddProduct(
    IN productName VARCHAR(255),
    IN stockQuantity INT,
    IN price DECIMAL(10,2)
)
BEGIN
    -- คำสั่ง SQL ใหม่ของคุณ
END;

จากคำสั่งด้านบนจะเห็นว่าตอนที่เราลบ Stored Procedure เราสามารถใช้คำสั่ง DROP ได้เลย

DROP PROCEDURE IF EXISTS AddProduct;

แล้วไหนที่บอกว่าเอาไว้ลดการคิวรีซ้ำ ๆ ล่ะ? สำหรับการคิวรีเราก็ทำเหมือนเดิมเลยคือ สร้าง PROCEDURE ใส่ SQL คิวรีของเราไปในระหว่าง BEGIN กับ END

DELIMITER //

CREATE PROCEDURE GetProducts()
BEGIN
    SELECT * FROM Products;
END //

DELIMITER ;

ตอนเรียกใช้ก็ค่อย CALL มาแบบนี้

CALL GetProducts();

ก่อนจะจบไปหลายคนคงสงสัยใช่มั้ยครับว่า DELIMITER คืออิหยัง? โดยใน MySQL เราจะใช้มันเป็นตัวแบ่งคำสั่งเพื่อบอกว่าจบคำสั่ง SQL แล้วนะ คล้าย ๆ กับ เซมิโคลอน (;) เลย แต่เมื่อเราสร้าง Stored Procedure หรือ Trigger ที่มีหลายคำสั่ง เราจะใช้ DELIMITER เพื่อเปลี่ยนตัวแบ่งชั่วคราว เพื่อไม่ให้ MySQL สับสนกับเครื่องหมายเซมิโคลอนที่อยู่ภายใน Stored Procedure นั่นเอง

ทั้งหมดนี้ก็จะเป็นตัวอย่างง่าย ๆ สำหรับการใช้งาน Stored Procedure แอดหวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนนะคร้าบบบ 💗

Sirasit Boonklang

Author Sirasit Boonklang

More posts by Sirasit Boonklang

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า