Zřetězujete pArea
parametr do neuvozovek SQL. Tedy obsah @Query
který připravujete k provedení:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Od Teynampet
není v uvozovkách, je analyzován jako (n neznámý) SQL identifikátor spíše než řetězec. Měli byste buď:
-
citujte jej ve svém SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
předejte jej připravenému příkazu jako parametr:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
a poté:
EXECUTE stmt USING @param;
Proč zde však používat připravená prohlášení? Váš postup lze přepsat jako jednoduchý SELECT
(což vyvolává otázku, zda vůbec potřebujete použít uloženou proceduru):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Všimněte si, že bych vám doporučil použít NULL
místo prázdného řetězce ''
, v takovém případě by výše uvedený test byl pArea IS NULL OR pArea = AreaName
).