MySQL में कस्टम स्टोर्ड फंक्शन बनाना
हाँ, MySQL आपको CREATE FUNCTION का उपयोग करके अपने खुद के फंक्शन बनाने की अनुमति देता है जिनका उपयोग SQL क्वेरी में किया जा सकता है।
सिंटैक्स
DELIMITER //
CREATE FUNCTION yourFunctionName(parameters)
RETURNS dataType
DETERMINISTIC
NO SQL
BEGIN
-- आपके स्टेटमेंट्स
RETURN result;
END //
DELIMITER ;
महत्वपूर्ण कीवर्ड
| कीवर्ड |
अर्थ |
| DETERMINISTIC |
एक ही इनपुट के लिए हमेशा एक ही आउटपुट देता है (ऑप्टिमाइज़ेशन के लिए) |
| NO SQL |
फंक्शन में कोई SQL स्टेटमेंट नहीं है |
| READS SQL DATA |
फंक्शन डेटा पढ़ता है लेकिन संशोधित नहीं करता |
| MODIFIES SQL DATA |
फंक्शन डेटा संशोधित करता है (INSERT/UPDATE/DELETE) |
उदाहरण: पहला नाम निकालने वाला फंक्शन
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 |
+--------------------------------+
1 row in set, 2 warnings (0.00 sec)
दूसरा उदाहरण: टैक्स कैलकुलेटर
DELIMITER //
CREATE FUNCTION calculate_tax(amount DECIMAL(10,2), tax_rate DECIMAL(5,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
NO SQL
BEGIN
RETURN ROUND(amount * tax_rate / 100, 2);
END //
DELIMITER ;
SELECT calculate_tax(1000.00, 18.00) AS GST; -- 180.00
फंक्शन देखना और प्रबंधित करना
-- सभी फंक्शन देखें
SHOW FUNCTION STATUS WHERE Db = 'yourDatabase';
-- फंक्शन की परिभाषा देखें
SHOW CREATE FUNCTION get_First_Name;
-- फंक्शन हटाएं
DROP FUNCTION IF EXISTS get_First_Name;
सीमाएं और सावधानियां
- फंक्शन डिटरमिनिस्टिक होने चाहिए (या NO SQL/READS SQL DATA घोषित)
- ट्रांजैक्शन कंट्रोल (COMMIT/ROLLBACK) फंक्शन में नहीं कर सकते
- फंक्शन स्केलर मान लौटाते हैं, रिजल्ट सेट नहीं
- रिजल्ट सेट के लिए स्टोर्ड प्रोसीजर उपयोग करें
- MySQL 8.0+ में CREATE FUNCTION के लिए FUNCTION विशेषाधिकार चाहिए
फंक्शन vs प्रोसीजर
| विशेषता |
फंक्शन |
प्रोसीजर |
| रिटर्न मान |
आवश्यक (स्केलर) |
वैकल्पिक (OUT पैरामीटर) |
| SELECT में उपयोग |
हाँ |
नहीं (CALL से कॉल करें) |
| ट्रांजैक्शन |
नहीं |
हाँ |
| रिजल्ट सेट |
नहीं |
हाँ |