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

संग्रहीत कार्यविधि में गतिशील क्वेरी बनाना MySQL

आप pArea . को जोड़ रहे हैं एसक्यूएल में पैरामीटर unquoted. यानी @Query . की सामग्री जिसे आप निष्पादन के लिए तैयार करते हैं वह है:

SELECT PinCode FROM Areas WHERE AreaName = Teynampet

चूंकि Teynampet उद्धृत नहीं किया गया है, इसे एक स्ट्रिंग के बजाय एक (n अज्ञात) SQL पहचानकर्ता के रूप में पार्स किया गया है। आपको या तो करना चाहिए:

  • इसे अपने SQL में उद्धृत करें:

    SET @City  = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
    
  • इसे एक पैरामीटर के रूप में तैयार स्टेटमेंट में पास करें:

    SET @City  = CONCAT(' WHERE AreaName = ?');
    SET @param = pArea;
    

    और फिर:

    EXECUTE stmt USING @param;
    

हालाँकि, यहाँ तैयार कथनों का उपयोग क्यों करें? आपकी प्रक्रिया को एक साधारण SELECT . के रूप में फिर से लिखा जा सकता है (जो यह सवाल उठाता है कि क्या आपको किसी संग्रहीत कार्यविधि का उपयोग करने की आवश्यकता है):

CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
  SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');

(ध्यान दें कि मैं आपको NULL . का उपयोग करने की सलाह दूंगा खाली स्ट्रिंग के बजाय '' , जिस स्थिति में उपरोक्त परीक्षण pArea IS NULL OR pArea = AreaName होगा )।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे सुवक्ता के साथ Laravel में AUTO_INCREMENT सेट करने के लिए?

  2. MySQL डेटाटाइम को टाइमस्टैम्प में बदलें

  3. MySQL में डिफ़ॉल्ट बाधा कैसे जोड़ें

  4. डीबग पीडीओ mySql खाली के बजाय डेटाबेस में NULL डालें

  5. Laravel:एक MySQL क्वेरी से एकल मान प्राप्त करना