วิธีสร้าง Custom Function ใน MySQL
MySQL รองรับการสร้างฟังก์ชันผู้ใช้ (User-Defined Functions) ด้วยคำสั่ง CREATE FUNCTION
รูปแบบไวยากรณ์ (Syntax)
DELIMITER //
CREATE FUNCTION yourFunctionName(parameters)
RETURNS dataType
DETERMINISTIC
NO SQL
BEGIN
-- statements
RETURN result;
END //
DELIMITER ;
DETERMINISTIC- ฟังก์ชันคืนค่าเดียวกันสำหรับอินพุตเดียวกัน (ช่วยให้ Optimizer ทำงานได้ดีขึ้น)NO SQL- บ่งชี้ว่าฟังก์ชันไม่มีคำสั่ง SQL (มีตัวเลือกอื่น:READS SQL DATA,MODIFIES SQL DATA)
ตัวอย่าง: ฟังก์ชันดึงชื่อแรกจากชื่อเต็ม
mysql> DELIMITER //
mysql> CREATE FUNCTION get_First_Name(Name VARCHAR(255))
RETURNS VARCHAR(255)
DETERMINISTIC
NO SQL
BEGIN
RETURN LEFT(Name, LOCATE(' ', Name) - 1);
END //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;
การเรียกใช้ฟังก์ชัน
mysql> select get_First_Name('David Miller');
+--------------------------------+
| get_First_Name('David Miller') |
+--------------------------------+
| David |
+--------------------------------+
คำอธิบายโค้ด: LOCATE(' ', Name) หาตำแหน่งของช่องว่างแรก, LEFT(Name, pos-1) ดึงตัวอักษรตั้งแต่ต้นจนก่อนช่องว่าง
ข้อจำกัด: ฟังก์ชันไม่สามารถทำ Transaction (COMMIT/ROLLBACK) ได้ และไม่ควรทำการ Query ตารางขนาดใหญ่ภายในฟังก์ชันเพราะจะส่งผลต่อประสิทธิภาพ