ความแตกต่างที่สำคัญที่สุดระหว่าง Procedure และ Function คือพวกเขาถูกเรียกใช้ (Invoke) แตกต่างกัน และเพื่อวัตถุประสงค์ที่ต่างกัน นอกจากนี้ ความแตกต่างอื่นๆ ระหว่าง Procedure และ Function มีดังนี้:
Procedure ไม่คืนค่า แต่ถูกเรียกใช้ด้วยคำสั่ง CALL เพื่อดำเนินการ เช่น การแก้ไขตาราง หรือประมวลผลเรคคอร์ดที่ดึงมา
สementara Function ถูกเรียกใช้ภายใน Expression และคืนค่าค่าเดียวโดยตรงให้ Caller เพื่อใช้ใน Expression นั่นคือ Function ถูกใช้ใน Expressions เช่นเดียวกับ Constant, Built-in Function หรือการอ้างอิงคอลัมน์ตาราง
เราไม่สามารถเรียก Function ด้วยคำสั่ง CALL ได้ เราไม่สามารถเรียก Procedure ใน Expression ได้
ไวยากรณ์สำหรับการสร้าง Routine แตกต่างกันเล็กน้อยระหว่าง Procedure และ Function ดังนี้:
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body
CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body
proc_parameter: [ IN | OUT | INOUT ] param_name type
func_parameter: param_name type
type: Any valid MySQL data type
characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }
routine_body: Valid SQL routine statement
พารามิเตอร์ของ Procedure สามารถกำหนดเป็น Input-only, Output-only หรือทั้ง Input และ Output นี่หมายความว่า Procedure สามารถส่งค่ากลับให้ Caller ได้โดยใช้ Output Parameters ค่าเหล่านี้สามารถเข้าถึงได้ในคำสั่งที่ตามหลัง CALL Statement
สementara Function มีเฉพาะ Input Parameters ดังนั้น แม้ทั้งคู่จะมี Parameters การประกาศพารามิเตอร์ของ Procedure จะแตกต่างจาก Function
Function คืนค่า ดังนั้นต้องมี Clause RETURNS ในการกำหนด Function เพื่อระบุชนิดข้อมูลของค่าคืน ต้องมีคำสั่ง RETURN อย่างน้อยหนึ่งคำสั่งภายใน Body ของ Function เพื่อคืนค่าให้ Caller
ส่วน Procedure RETURNS และ RETURN ไม่ปรากฏในการกำหนด Procedure