Você está concatenando o
pArea
parâmetro no SQL sem aspas. Ou seja, o conteúdo de @Query
que você prepara para execução é:SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Desde
Teynampet
não está entre aspas, ele é analisado como um identificador SQL (n desconhecido) em vez de uma string. Você deve:-
cite-o em seu SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
passe-o para a instrução preparada como um parâmetro:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
e depois:
EXECUTE stmt USING @param;
No entanto, por que usar declarações preparadas aqui? Seu procedimento pode ser reescrito como um simples
SELECT
(o que levanta a questão de saber se você precisa usar um procedimento armazenado):CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Observe que eu recomendo que você use
NULL
em vez da string vazia ''
, caso em que o teste acima seria pArea IS NULL OR pArea = AreaName
).