MySQL में स्टोर्ड फ़ंक्शन बनाकर विशिष्ट नाम के अंकों का औसत निकालना
MySQL में CREATE FUNCTION का उपयोग करके पुन: प्रयोज्य स्टोर्ड फ़ंक्शन बना सकते हैं जो पैरामीटर लेता है, गणना करता है, और मान लौटाता है।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना
mysql> CREATE TABLE DemoTable638 (Name VARCHAR(100), Marks INT);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable638 VALUES('John', 67), ('John', 90), ('David', 99), ('John', 60);
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable638;
आउटपुट:
+-------+-------+
| Name | Marks |
+-------+-------+
| John | 67 |
| John | 90 |
| David | 99 |
| John | 60 |
+-------+-------+
4 rows in set (0.00 sec)
स्टोर्ड फ़ंक्शन बनाना
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
mysql> DELIMITER //
mysql> CREATE FUNCTION getAverageDemo() RETURNS INT
BEGIN
DECLARE value INT;
SELECT AVG(Marks) INTO value FROM DemoTable638 WHERE Name = 'John';
RETURN value;
END //
mysql> DELIMITER ;
महत्वपूर्ण: log_bin_trust_function_creators = 1 बाइनरी लॉगिंग सक्षम होने पर फ़ंक्शन निर्माण की अनुमति देता है।
फ़ंक्शन कॉल करना
mysql> SELECT getAverageDemo();
आउटपुट:
+------------------+
| getAverageDemo() |
+------------------+
| 72 |
+------------------+
1 row in set (0.01 sec)
गणना: John के अंक: 67, 90, 60 → औसत = (67+90+60)/3 = 217/3 = 72.33 → INT में 72
फ़ंक्शन संरचना व्याख्या
CREATE FUNCTION function_name(parameters) RETURNS return_type
[characteristics] -- DETERMINISTIC, NO SQL, READS SQL DATA, etc.
BEGIN
-- घोषणाएं
DECLARE var_name type [DEFAULT value];
-- लॉजिक
SELECT ... INTO var_name ...;
RETURN var_name;
END
पैरामीटराइज़्ड फ़ंक्शन (अधिक लचीला)
CREATE FUNCTION getAverageByName(studentName VARCHAR(100)) RETURNS DECIMAL(10,2)
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE avg_marks DECIMAL(10,2);
SELECT AVG(Marks) INTO avg_marks FROM DemoTable638 WHERE Name = studentName;
RETURN COALESCE(avg_marks, 0); -- NULL सुरक्षा
END
उपयोग:
SELECT getAverageByName('John'); -- 72.33
SELECT getAverageByName('David'); -- 99.00
SELECT getAverageByName('Unknown'); -- 0.00
फ़ंक्शन देखना/हटाना
SHOW FUNCTION STATUS WHERE Name = 'getAverageDemo';
DROP FUNCTION IF EXISTS getAverageDemo;
फ़ंक्शन vs प्रोसीजर
| पहलू | FUNCTION | PROCEDURE |
|---|---|---|
| लौटाता है | एक मान (अनिवार्य) | कोई मान नहीं (OUT पैरामीटर से) |
| कहां उपयोग | SELECT, WHERE, expressions में | CALL स्टेटमेंट से |
| ट्रांजैक्शन | नहीं कर सकता | कर सकता है (COMMIT/ROLLBACK) |
| तालिका संशोधन | नहीं (READS SQL DATA) | कर सकता है |
साधारण क्वेरी विकल्प (फ़ंक्शन के बिना)
SELECT AVG(Marks) FROM DemoTable638 WHERE Name = 'John';
सरल मामलों के लिए सीधा क्वेरी बेहतर है। फ़ंक्शन जटिल पुन: प्रयोज्य तर्क के लिए उपयोगी।