สร้าง User-Defined Function (UDF) ใน MySQL
ใช้ CREATE FUNCTION พร้อม DELIMITER เพื่อกำหนดฟังก์ชันเอง
รูปแบบคำสั่ง
DELIMITER //
DROP FUNCTION IF EXISTS yourFunctionName;
CREATE FUNCTION yourFunctionName(Parameter1, ... N) RETURNS type
BEGIN
DECLARE variable_name type DEFAULT default_value;
-- SQL statements
RETURN value;
END //
DELIMITER ;
ตัวอย่าง: สร้างตารางและ Function ค้นหาชื่อจาก ID
mysql> CREATE TABLE ViewDemo (
-> Id INT,
-> Name VARCHAR(200),
-> Age INT
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> INSERT INTO ViewDemo VALUES(1,'John',23);
mysql> INSERT INTO ViewDemo VALUES(2,'Sam',24);
สร้าง Function searchRecord
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP FUNCTION IF EXISTS searchRecord;
mysql> CREATE FUNCTION searchRecord(yourId INT) RETURNS CHAR(100)
-> BEGIN
-> DECLARE Name1 CHAR(100) DEFAULT 'No Name Found For This Id';
-> SELECT Name INTO Name1 FROM ViewDemo WHERE Id = yourId;
-> RETURN Name1;
-> END //
Query OK, 0 rows affected (0.33 sec)
mysql> DELIMITER ;
หมายเหตุ: log_bin_trust_function_creators ต้องเป็น 1 ถ้า binary logging เปิดอยู่
ทดสอบ Function
กรณีที่ 1: ID มีอยู่ (Id = 2)
mysql> SELECT searchRecord(2) AS Found;
+-------+ | Found | +-------+ | Sam | +-------+ 1 row in set (0.00 sec)
กรณีที่ 2: ID ไม่มีอยู่ (Id = 100)
mysql> SELECT searchRecord(100) AS Found;
+---------------------------+ | Found | +---------------------------+ | No Name Found For This Id | +---------------------------+ 1 row in set (0.00 sec)
ข้อจำกัดของ Function:
- ไม่สามารถใช้ transaction statements (COMMIT, ROLLBACK)
- ไม่สามารถ modify table data (INSERT, UPDATE, DELETE)
- ต้องระบุ
DETERMINISTIC,NO SQL,READS SQL DATAหรือMODIFIES SQL DATA - ไม่รองรับ OUT/INOUT parameters (ใช้ Procedure แทน)
คำสั่งดู Function ที่สร้าง:
SHOW FUNCTION STATUS WHERE Db = 'your_database'; SHOW CREATE FUNCTION searchRecord;