Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ความแตกต่างระหว่าง Function และ Procedure ใน SQL

Function (ฟังก์ชัน)

Function ในบริบทภาษาโปรแกรมคอมพิวเตอร์ คือ ชุดคำสั่งที่รับค่าอินพุต (Input) และดำเนินการงานเฉพาะเจาะจง ใน SQL Function จะ คืนค่า (Return Value) กลับไปเสมอ

Procedure (กระบวนงาน/ขั้นตอน)

Procedure ก็คือ ชุดคำสั่งที่รับอินพุตและดำเนินการงาน แต่ใน SQL Procedure ไม่คืนค่า (Return Control Only) ใน Java Procedure และ Function เรียกว่า Sub-routines คล้ายกัน

ตารางเปรียบเทียบความแตกต่างสำคัญ

ลำดับ หัวข้อ Function Procedure
1 นิยาม ใช้คำนวณผลลัพธ์จากอินพุตที่ให้มา ใช้ดำเนินการงานตามลำดับขั้นตอน
2 การเรียกใช้ (Call) สามารถเรียกจาก Procedure ได้ ไม่สามารถเรียกจาก Function ได้
3 DML Statements ไม่สามารถรัน INSERT/UPDATE/DELETE ได้ รัน DML ได้
4 ใช้ใน Query เรียกใน SELECT/WHERE/ORDER BY ได้ ไม่สามารถเรียกใน Query ได้
5 การคอมไพล์ คอมไพล์ทุกครั้งที่ถูกเรียก คอมไพล์ครั้งเดียว เรียกซ้ำได้โดยไม่คอมไพล์ใหม่
6 การคืนค่า คืนค่าและ Control ให้ Caller คืน Control เท่านั้น ไม่คืนค่า
7 Try-Catch ไม่รองรับ รองรับ Try-Catch Blocks
8 SELECT Statement สามารถมี Function Call ได้ ไม่สามารถมี Procedure Call ได้
9 Transaction Handling ไม่สามารถจัดการ Transaction เองได้ จัดการ Transaction เองได้ (Explicit)

สรุปการเลือกใช้

  • ใช้ Function เมื่อ: ต้องการคำนวณค่า คืนค่ากลับ ใช้ใน Query ได้ ตรรกะไม่ซับซ้อน
  • ใช้ Procedure เมื่อ: ต้องการดำเนินการหลายขั้นตอน (Business Logic) มี DML/Transaction ไม่ต้องคืนค่า ต้องการ Error Handling

ตัวอย่างใน MySQL

-- Function
CREATE FUNCTION CalculateTax(amount DECIMAL(10,2)) 
RETURNS DECIMAL(10,2)
DETERMINISTIC
RETURN amount * 0.07;

-- Procedure
CREATE PROCEDURE ProcessOrder(IN order_id INT, OUT status VARCHAR(20))
BEGIN
    DECLARE total DECIMAL(10,2);
    SELECT SUM(price) INTO total FROM order_items WHERE order_id = order_id;
    IF total > 1000 THEN
        UPDATE orders SET status = 'APPROVED' WHERE id = order_id;
        SET status = 'SUCCESS';
    ELSE
        SET status = 'REJECTED';
    END IF;
END;