Khác biệt cốt lõi: cách gọi và mục đích khác nhau.
- Procedure:
- Không trả về giá trị (không có RETURNS)
- Gọi bằng
CALLđể thực hiện thao tác: sửa bảng, xử lý record... - Tham số: IN, OUT, INOUT (trả giá trị qua OUT/INOUT)
- Function:
- Trả về một giá trị đơn (bắt buộc có
RETURNS typevàRETURN) - Gọi trong biểu thức (như hằng số, hàm built-in, cột bảng)
- Chỉ có tham số IN (đầu vào)
- Không gọi bằng CALL, không dùng trong biểu thức
- Trả về một giá trị đơn (bắt buộc có
Cú pháp tạo khác nhau:
CREATE PROCEDURE sp_name ([IN|OUT|INOUT] param_name type) ... CREATE FUNCTION sp_name ([param_name type]) RETURNS type ...
Function bắt buộc có RETURNS và RETURN, Procedure thì không.