MySQL có hai loại khác nhau của biến:
biến địa phương (mà không bắt đầu bởi @
) được gõ mạnh mẽ và phạm vi vào khối chương trình được lưu trữ, trong đó chúng được khai báo. Lưu ý rằng, như tài liệu dưới DECLARE
Syntax:
DECLARE
chỉ được phép trong một tuyên bố BEGIN ... END
hợp chất và phải vào đầu của nó, trước khi bất kỳ báo cáo khác.
user variables (mà là bắt đầu bằng @
) đều được loại lỏng lẻo và scoped để phiên. Lưu ý rằng họ không cần hoặc không thể được tuyên bố — chỉ cần sử dụng chúng trực tiếp.
Do đó, nếu bạn đang xác định một chương trình lưu trữ và thực sự muốn có một "biến địa phương", mỗi từ ngữ trong câu hỏi của bạn, bạn sẽ cần phải thả các nhân vật @
và đảm bảo rằng tuyên bố DECLARE
của bạn đang ở bắt đầu khối chương trình của bạn. Nếu không, để sử dụng "biến người dùng", hãy thả câu lệnh DECLARE
.
Hơn nữa, bạn sẽ có cần phải bao vây truy vấn của bạn trong ngoặc đơn để thực hiện nó như một subquery:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
Hoặc nếu không, bạn có thể sử dụng SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
Tôi nghĩ bạn có thể định sử dụng toán tử gán [[:: '] (http://dev.mysql.com/doc/en/assignment-operators.html#operator_assign-value), chứ không phải là [' = 'toán tử bình đẳng] (http://dev.mysql.com/doc/en/comparison-operators.html#operator_equal)? – eggyal
Cảm ơn bạn đã cập nhật nội dung quan trọng đó @eggyal –