Du sammanfogar pArea
parametern till SQL utan citat. Det vill säga innehållet i @Query
som du förbereder för utförande är:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Sedan Teynampet
är utan citattecken, tolkas den som en (n okänd) SQL-identifierare snarare än en sträng. Du bör antingen:
-
citera det i din SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
skicka den till den förberedda satsen som en parameter:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
och sedan:
EXECUTE stmt USING @param;
Men varför använda förberedda uttalanden här? Din procedur kan skrivas om som en enkel SELECT
(vilket väcker frågan om du behöver använda en lagrad procedur överhuvudtaget):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Observera att jag rekommenderar att du använder NULL
istället för den tomma strängen ''
, i vilket fall ovanstående test skulle vara pArea IS NULL OR pArea = AreaName
).