Sie verketten die pArea
Parameter in die SQL ohne Anführungszeichen. Das heißt, der Inhalt von @Query
die Sie zur Ausführung vorbereiten, ist:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Seit Teynampet
nicht in Anführungszeichen gesetzt ist, wird er als (nunbekannter) SQL-Bezeichner und nicht als Zeichenfolge geparst. Sie sollten entweder:
-
zitiere es in deinem SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
übergeben Sie es als Parameter an die vorbereitete Anweisung:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
und dann:
EXECUTE stmt USING @param;
Warum aber hier vorbereitete Anweisungen verwenden? Ihre Prozedur kann als einfaches SELECT
umgeschrieben werden (was die Frage aufwirft, ob Sie überhaupt eine gespeicherte Prozedur verwenden müssen):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Beachten Sie, dass ich Ihnen die Verwendung von NULL
empfehlen würde anstelle des leeren Strings ''
, in diesem Fall wäre der obige Test pArea IS NULL OR pArea = AreaName
).