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
).