ความแตกต่างที่สำคัญที่สุดระหว่างขั้นตอนและฟังก์ชันคือการเรียกใช้ต่างกันและเพื่อวัตถุประสงค์ที่แตกต่างกัน นอกเหนือจากนั้นต่อไปนี้คือความแตกต่างระหว่างขั้นตอนและหน้าที่ -
-
โพรซีเดอร์ไม่คืนค่า แต่จะเรียกใช้ด้วยคำสั่ง CALL เพื่อดำเนินการ เช่น การปรับเปลี่ยนตารางหรือการประมวลผลระเบียนที่ดึงมา
ในอีกทางหนึ่ง ฟังก์ชันจะถูกเรียกใช้ภายในนิพจน์ และส่งคืนค่าเดียวไปยังผู้เรียกโดยตรงเพื่อใช้ในนิพจน์ กล่าวคือ ฟังก์ชันถูกใช้ในนิพจน์ในลักษณะเดียวกับค่าคงที่ ฟังก์ชันในตัว หรือการอ้างอิงไปยังคอลัมน์ของตาราง
-
เราไม่สามารถเรียกใช้ฟังก์ชันด้วยคำสั่ง CALL เราไม่สามารถเรียกใช้ขั้นตอนในนิพจน์ได้
-
ไวยากรณ์สำหรับการสร้างรูทีนค่อนข้างแตกต่างจากโพรซีเดอร์และฟังก์ชันดังนี้ −
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
-
พารามิเตอร์ขั้นตอนสามารถกำหนดเป็นอินพุตเท่านั้น เอาต์พุตเท่านั้น หรือสำหรับทั้งอินพุตและเอาต์พุต ซึ่งหมายความว่าโพรซีเดอร์สามารถส่งค่ากลับไปยังผู้เรียกได้โดยใช้พารามิเตอร์เอาต์พุต ค่าเหล่านี้สามารถเข้าถึงได้ในข้อความสั่งที่ตามหลังคำสั่ง CALL
ในทางกลับกัน ฟังก์ชันมีเฉพาะพารามิเตอร์อินพุตเท่านั้น ดังนั้น แม้ว่าโพรซีเดอร์และฟังก์ชันทั้งสองสามารถมีพารามิเตอร์ได้ แต่ไวยากรณ์การประกาศพารามิเตอร์ของโพรซีเดอร์จะแตกต่างจากที่สำหรับฟังก์ชัน
-
ฟังก์ชันส่งคืนค่า ดังนั้นจึงต้องมีส่วนคำสั่ง RETURNS ในข้อกำหนดของฟังก์ชันเพื่อระบุชนิดข้อมูลของค่าที่ส่งกลับ นอกจากนี้ ต้องมีคำสั่ง RETURN อย่างน้อยหนึ่งคำสั่งภายในเนื้อหาของฟังก์ชันเพื่อคืนค่าให้กับผู้เรียก
ในทางกลับกัน RETURNS และ RETURN จะไม่ปรากฏในคำจำกัดความของขั้นตอน