3

我有以下 MySQL 查询。

DECLARE RecCount Int Default 0;
SET RecCount=(select count(*) from tables where WaiterID=1 and date(TDate)=date(now()));

当我执行它时,我收到以下错误:

Error Code: 1193. Unknown system variable 'RecCount'

所以,我用谷歌搜索了“在 MySQL 中声明变量”。似乎每个人都使用DECLARE

我不明白为什么我的查询没有执行。

我正在使用 MYSQL WORKBENCH 6.0 CE,我最终想在 PHP 中执行这个查询。

编辑:
我使用默认值 0。如果我删除默认值 0,并将查询更改为我在下面写的内容,它就会执行。但它仍然没有像它应该的那样保存结果!

SET RecCount=(select count(*) from tables where WaiterID=1 and date(TDate)=date(now()));
SELECT RecCount;
4

2 回答 2

5

您必须在过程或函数中运行该代码。

如果您使用控制语句,则必须在函数或过程中使用它们。

MySQL 支持 IF、CASE、ITERATE、LEAVE LOOP、WHILE 和 REPEAT 结构,用于存储程序中的流控制。

来源

于 2013-10-07T11:58:45.997 回答
2

您找到的手册页DECLARE说:

该语句在存储程序中声明局部变量。

如果您在DECLARE其他地方使用,则会出现语法错误:

mysql> DECLARE RecCount Int 默认 0;
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DECLARE RecCount Int Default 0”附近使用正确的语法

您的第一个结果清楚地定义了一个BEGIN...END代码块,该代码块不起作用(因此是问题),因为 MySQL 不支持匿名代码块。

您的 MySQL 客户端可能未配置为因错误而中止,而您只得到最后一个。

我的印象是您在使用会话变量,但您不使用DECLARE它:您使用SET

mysql> SET @foo='bar';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @foo;
+------+
| @foo |
+------+
| bar  |
+------+
1 row in set (0.00 sec)
于 2013-10-07T12:02:31.650 回答