Stai concatenando la pArea
parametro nell'SQL senza virgolette. Cioè, il contenuto di @Query
che prepari per l'esecuzione è:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Da Teynampet
non è tra virgolette, viene analizzato come identificatore SQL (n sconosciuto) anziché come stringa. Dovresti:
-
citalo nel tuo SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
passalo all'istruzione preparata come parametro:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
e poi:
EXECUTE stmt USING @param;
Tuttavia, perché usare qui le dichiarazioni preparate? La tua procedura può essere riscritta come un semplice SELECT
(che solleva la questione se sia necessario utilizzare una procedura memorizzata):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Nota che ti consiglio di usare NULL
invece della stringa vuota ''
, nel qual caso il test precedente sarebbe pArea IS NULL OR pArea = AreaName
).