使用DECLARE的未知系统变量

时间:2013-10-07 11:53:26

标签: mysql sql

我有以下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'

所以,我用Google搜索“在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;

2 个答案:

答案 0 :(得分:5)

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

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

  

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

Source

答案 1 :(得分:1)

您找到的manual page for DECLARE说:

  

此声明声明存储程序中的局部变量

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

  

的MySQL> DECLARE RecCount Int默认值0;
ERROR 1064(42000):你有一个   SQL语法错误;查看与您的手册相对应的手册   用于在'DECLARE附近使用的r语法的MySQL服务器版本   RecCount Int第1行的默认值0'

你的first result清楚地定义了一个BEGIN...END代码块,它不起作用(因此问题),因为MySQL不支持匿名代码块。

你的MySQL客户端可能没有配置为中止错误,你只能得到最后一个。

我的印象是你在会话变量之后但你没有使用DECLAREyou use 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)