Bạn đang nối pArea
tham số vào SQL không được trích dẫn. Đó là nội dung của @Query
mà bạn chuẩn bị để thực hiện là:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Kể từ Teynampet
không được trích dẫn, nó được phân tích cú pháp như một định danh SQL (n không xác định) chứ không phải là một chuỗi. Bạn nên:
-
trích dẫn nó trong SQL của bạn:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
chuyển nó vào câu lệnh đã chuẩn bị dưới dạng tham số:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
và sau đó:
EXECUTE stmt USING @param;
Tuy nhiên, tại sao lại sử dụng câu lệnh chuẩn bị ở đây? Thủ tục của bạn có thể được viết lại dưới dạng SELECT
đơn giản (điều này đặt ra câu hỏi liệu bạn có cần sử dụng một quy trình đã lưu trữ hay không):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(Lưu ý rằng tôi khuyên bạn nên sử dụng NULL
thay vì chuỗi trống ''
, trong trường hợp đó, kiểm tra trên sẽ là pArea IS NULL OR pArea = AreaName
).