MySQL में यूजर-डिफाइंड फंक्शन (UDF) बनाना: CREATE FUNCTION सिंटैक्स और उदाहरण
सिंटैक्स:
DELIMITER //
DROP FUNCTION IF EXISTS yourFunctionName;
CREATE FUNCTION yourFunctionName(Parameter1 type, ...) RETURNS return_type
BEGIN
-- वेरिएबल घोषित करें
-- SQL स्टेटमेंट्स
RETURN value;
END //
DELIMITER ;
महत्वपूर्ण: लॉग बिन ट्रस्ट सेटिंग
MySQL में फंक्शन बनाने के लिए (बाइनरी लॉगिंग सक्षम होने पर):
SET GLOBAL log_bin_trust_function_creators = 1;
व्यावहारिक उदाहरण: ID से नाम खोजने वाला फंक्शन
1. टेबल बनाएं और डेटा डालें:
mysql> CREATE TABLE ViewDemo (Id INT, Name VARCHAR(200), Age INT); mysql> INSERT INTO ViewDemo VALUES(1,'John',23); mysql> INSERT INTO ViewDemo VALUES(2,'Sam',24);
2. फंक्शन बनाएं:
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
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 ;
3. फंक्शन टेस्ट करें:
केस 1: मौजूदा ID (2)
mysql> SELECT searchRecord(2) AS Found;
+-------+ | Found | +-------+ | Sam | +-------+ 1 row in set (0.00 sec)
केस 2: गैर-मौजूद ID (100)
mysql> SELECT searchRecord(100) AS Found;
+---------------------------+ | Found | +---------------------------+ | No Name Found For This Id | +---------------------------+ 1 row in set (0.00 sec)
फंक्शन के प्रकार:
| प्रकार | विवरण | उदाहरण |
|---|---|---|
| स्केलर फंक्शन | एकल मान लौटाता है | ऊपर का उदाहरण |
| टेबल-वैल्यूड फंक्शन | MySQL में समर्थित नहीं (SQL Server में है) | — |
| एग्रीगेट फंक्शन | उपयोगकर्ता-परिभाषित एग्रीगेट नहीं बना सकते | — |
फंक्शन vs स्टोर्ड प्रोसीजर:
| विशेषता | फंक्शन | स्टोर्ड प्रोसीजर |
|---|---|---|
| RETURN मान | आवश्यक (एक) | वैकल्पिक (OUT पैरामीटर) |
| SELECT में उपयोग | हां | नहीं (CALL से) |
| ट्रांजैक्शन | नहीं | हां |
| टेबल बदलना | नहीं (केवल पढ़ें) | हां |
सर्वोत्तम अभ्यास:
- फंक्शन नाम में स्पेस न रखें
- डिटरमिनिस्टिक फंक्शन के लिए
DETERMINISTICकीवर्ड जोड़ें (प्रदर्शन) READS SQL DATAयाNO SQLविशेषता घोषित करें- जटिल लॉजिक के लिए स्टोर्ड प्रोसीजर प्राथमिकता दें
CREATE FUNCTION func_name(...) RETURNS type DETERMINISTIC READS SQL DATA BEGIN ... END