Estás concatenando el pArea
parámetro en el SQL sin comillas. Es decir, el contenido de @Query
que preparas para la ejecución es:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Desde Teynampet
no está entre comillas, se analiza como un identificador SQL (desconocido) en lugar de una cadena. Deberías:
-
cítelo en su SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
páselo a la declaración preparada como un parámetro:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
y luego:
EXECUTE stmt USING @param;
Sin embargo, ¿por qué usar declaraciones preparadas aquí? Su procedimiento se puede reescribir como un simple SELECT
(lo que plantea la cuestión de si necesita utilizar un procedimiento almacenado):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Tenga en cuenta que le recomiendo que use NULL
en lugar de la cadena vacía ''
, en cuyo caso la prueba anterior sería pArea IS NULL OR pArea = AreaName
).