Vous concaténez la pArea paramètre dans le SQL sans guillemets. Autrement dit, le contenu de @Query que vous préparez pour l'exécution est :
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Depuis Teynampet n'est pas entre guillemets, il est analysé comme un identifiant SQL (n inconnu) plutôt que comme une chaîne. Vous devez soit :
-
citez-le dans votre SQL :
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea)); -
passez-le à l'instruction préparée en tant que paramètre :
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;puis :
EXECUTE stmt USING @param;
Cependant, pourquoi utiliser des instructions préparées ici ? Votre procédure peut être réécrite comme un simple SELECT (ce qui soulève la question de savoir si vous avez besoin d'utiliser une procédure stockée):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Notez que je vous recommande d'utiliser NULL au lieu de la chaîne vide '' , auquel cas le test ci-dessus serait pArea IS NULL OR pArea = AreaName ).