Вие свързвате pArea
параметър в SQL без кавички. Тоест, съдържанието на @Query
което подготвяте за изпълнение е:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Тъй като Teynampet
е без кавички, той се анализира като (n неизвестен) SQL идентификатор, а не като низ. Трябва или:
-
цитирайте го във вашия SQL:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
предайте го на подготвената инструкция като параметър:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
и след това:
EXECUTE stmt USING @param;
Въпреки това, защо да използвате подготвени изявления тук? Вашата процедура може да бъде пренаписана като прост SELECT
(което повдига въпроса дали изобщо трябва да използвате съхранена процедура):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Обърнете внимание, че бих ви препоръчал да използвате NULL
вместо празния низ ''
, в който случай горният тест ще бъде pArea IS NULL OR pArea = AreaName
).