आप 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
होगा )।