Du sammenkæder pArea
parameter ind i SQL'en uden anførselstegn. Det vil sige indholdet af @Query
som du forbereder til udførelse er:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Siden Teynampet
er uden anførselstegn, parses den som en (n ukendt) SQL-id i stedet for en streng. Du skal enten:
-
citer det i din SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
videregive det til den forberedte erklæring som en parameter:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
og derefter:
EXECUTE stmt USING @param;
Men hvorfor bruge forberedte udsagn her? Din procedure kan omskrives som en simpel SELECT
(hvilket rejser spørgsmålet om, hvorvidt du overhovedet skal bruge en lagret procedure):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Bemærk, at jeg vil anbefale dig at bruge NULL
i stedet for den tomme streng ''
, i hvilket tilfælde ovenstående test ville være pArea IS NULL OR pArea = AreaName
).