Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

संग्रहीत प्रक्रिया में mysql गतिशील क्वेरी

<ब्लॉकक्वॉट>

त्रुटि कोड:1054. 'जहां खंड' में अज्ञात कॉलम 'एसपीए'

यह तब होता है जब आप इनपुट स्ट्रिंग को कोट्स के भीतर संलग्न नहीं करते हैं, और SQL इंजन इसे क्वेरी की जा रही तालिका में एक कॉलम के रूप में पहचानने की कोशिश करता है। लेकिन यह विफल हो जाता है क्योंकि यह इसे नहीं ढूंढ पाता है।

लेकिन क्या होता है जब उसे ऐसा कॉलम मिलता है?
जब यह कॉलम मानों पर कुछ मिलान पाता है तो यह परिणाम प्राप्त करता है।
जाहिर है कि यह वह नहीं है जिसकी कोई उम्मीद कर रहा था।

इस पर कैसे काबू पाएं? गतिशील इनपुट मूल्यों के साथ तैयार वक्तव्य का प्रयोग करें।

आप ? . जैसे प्लेसहोल्डर का उपयोग कर सकते हैं संग्रहीत प्रक्रियाओं में भी गतिशील इनपुट मूल्यों पर Prepared Statements के साथ उपयोग करने के लिए . SQL एक्सप्रेशंस में असाइन या तुलना किए जाने पर इंजन एस्केप कैरेक्टर और अन्य स्ट्रिंग मानों को हैंडल करेगा।

आपको बस आवश्यकता के अनुसार एक या अधिक सत्र चर के लिए प्रक्रिया इनपुट को फिर से असाइन करने की आवश्यकता है।

आपकी प्रक्रिया पर उदाहरण :

CREATE PROCEDURE `test1`( IN tab_name VARCHAR(40), IN w_team VARCHAR(40) )
BEGIN
  SET @t1 = CONCAT( 'SELECT * FROM ', tab_name, ' where team = ?' ); -- <-- placeholder
  SET @w_team := w_team;

  PREPARE stmt3 FROM @t1;
  EXECUTE stmt3 USING @w_team; -- <-- input for placeholder
  DEALLOCATE PREPARE stmt3;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. फ़ाइल को MySQL ब्लॉब में लोड करने के लिए LOAD_FILE का उपयोग कैसे करें?

  2. कोडनिर्देशक लेनदेन

  3. MySQL - समय का योग कैसे करें?

  4. अभी सेट करें () डेटाटाइम डेटाटाइप के लिए डिफ़ॉल्ट मान के रूप में?

  5. TO_DAYS () उदाहरण – MySQL