MySQL स्टोर्ड प्रोसीजर में PREPARE, EXECUTE और उपयोगकर्ता-परिभाषित वेरिएबल (@variable) का उपयोग करके डायनामिक क्वेरी का परिणाम प्राप्त करें।
स्टोर्ड प्रोसीजर बनाना
mysql> DELIMITER //
mysql> CREATE PROCEDURE return_value()
-> BEGIN
-> SET @returnQuery = 'SELECT 98 INTO @value';
-> PREPARE stmt FROM @returnQuery;
-> EXECUTE stmt;
-> END
-> //
Query OK, 0 rows affected (0.20 sec)
mysql> DELIMITER ;
प्रोसीजर कॉल करना
mysql> CALL return_value(); Query OK, 1 row affected (0.07 sec)
वेरिएबल मान देखना
mysql> SELECT @value;
आउटपुट
+--------+ | @value | +--------+ | 98 | +--------+ 1 row in set (0.00 sec)
चरण-दर-चरण:
SET @returnQuery = 'SELECT 98 INTO @value'- डायनामिक SQL स्ट्रिंग बनाता है जो परिणाम को@valueमें स्टोर करता हैPREPARE stmt FROM @returnQuery- स्ट्रिंग से प्रिपेयर्ड स्टेटमेंट बनाता हैEXECUTE stmt- प्रिपेयर्ड स्टेटमेंट निष्पादित करता है, जो@valueसेट करता हैSELECT @value- सत्र वेरिएबल का मान पढ़ता है
व्यावहारिक उपयोग: डायनामिक टेबल नाम, कॉलम नाम, या रनटाइम पर निर्मित जटिल क्वेरी के लिए।
CREATE PROCEDURE get_count(IN table_name VARCHAR(64), OUT cnt INT)
BEGIN
SET @q = CONCAT('SELECT COUNT(*) INTO @cnt FROM ', table_name);
PREPARE stmt FROM @q;
EXECUTE stmt;
SET cnt = @cnt;
DEALLOCATE PREPARE stmt;
END
सफाई: DEALLOCATE PREPARE stmt का उपयोग करके प्रिपेयर्ड स्टेटमेंट मुक्त करें (मेमोरी लीक रोकने के लिए)।