Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL स्टोर्ड प्रोसीजर में WHERE IN() क्लॉज का उपयोग कैसे करें?

MySQL स्टोर्ड प्रोसीजर में डायनामिक WHERE IN() क्लॉज का उपयोग करने के लिए प्रिपेयर्ड स्टेटमेंट (Prepared Statements) का उपयोग करना पड़ता है, क्योंकि IN क्लॉज में सीधे पैरामीटर पास नहीं किया जा सकता।

समस्या

सीधे पैरामीटर उपयोग नहीं कर सकते:

-- यह काम नहीं करेगा:
SELECT * FROM table WHERE id IN (input_param);

समाधान: डायनामिक SQL

DELIMITER //
CREATE PROCEDURE whereInDemo(IN input VARCHAR(100))
BEGIN
    SET @Query = 'SELECT Name FROM DemoTable ';
    SET @Query = CONCAT(@Query, ' WHERE Id IN (', input, ')');
    PREPARE stmt FROM @Query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

उदाहरण

तालिका और डेटा:

mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES (100, 'Chris'), (101, 'Bob'), (102, 'David');

प्रोसीजर कॉल करें

mysql> CALL whereInDemo('100,102');

परिणाम

+-------+
| Name  |
+-------+
| Chris |
| David |
+-------+

महत्वपूर्ण बिंदु

  • CONCAT() - क्वेरी स्ट्रिंग बनाता है
  • PREPARE - SQL स्टेटमेंट तैयार करता है
  • EXECUTE - तैयार स्टेटमेंट निष्पादित करता है
  • DEALLOCATE PREPARE - स्टेटमेंट मुक्त करता है
  • इनपुट स्ट्रिंग में मान कॉमा से अलग होने चाहिए: '1,2,3'

सुरक्षा चेतावनी

यह दृष्टिकोण SQL इंजेक्शन के लिए संवेदनशील है। उत्पादन में मान्य करें या पैरामीटराइज़्ड क्वेरी के विकल्प तलाशें।

  1. - MySQL स्टोर्ड प्रोसीजर में IF...ELSE का उपयोग करके शर्तें सेट करना

    MySQL स्टोर्ड प्रोसीजर में IF...ELSE सशर्त तर्क MySQL स्टोर्ड प्रोसीजर IF...ELSE स्टेटमेंट का उपयोग करके सशर्त तर्क का समर्थन करते हैं, जिससे पैरामीटर मानों के आधार पर डायनामिक निष्पादन पथ सक्षम होते हैं। सिंटैक्स IF yourCondition THEN yourStatement1; ELSE yourStatement2; END IF; पूर्ण उदा

  1. - MySQL में शर्त के साथ स्टोर्ड प्रोसीजर से रिकॉर्ड कैसे अपडेट करें?

    MySQL में स्टोर्ड प्रोसीजर के अंदर UPDATE और WHERE क्लॉज का उपयोग करके शर्त के आधार पर रिकॉर्ड अपडेट किए जा सकते हैं। सिंटैक्स DELIMITER // CREATE PROCEDURE procedure_name(IN param1 TYPE, IN param2 TYPE) BEGIN UPDATE table_name SET col1 = param1, col2 = param2 WHERE condition; END // DE

  1. - MySQL में AUTO_INCREMENT कॉलम के साथ काम करना

    आइए समझते हैं कि MySQL में AUTO_INCREMENT कॉलम के साथ कैसे काम करें: AUTO_INCREMENT विशेषता का उपयोग नई रो के लिए एक अद्वितीय पहचानकर्ता उत्पन्न करने के लिए किया जाता है। आइए देखें कि यह स्टेटमेंट कैसे काम करता है। उससे पहले, नीचे दी गई क्वेरी पर विचार करें: क्वेरी CREATE TABLE tableName ( id