我使用的是MySQL,并且我定义了一个存储过程,如下所示:
delimiter ;;
Create procedure sp_test()
select * from name_table;
end
当我试图执行这个过程时,我得到了这个错误:
#2014 - Commands out of sync; you can't run this command now
这意味着什么?我做错了什么?
发布于 2012-01-17 15:50:18
来自Manual
C.5.2.14。命令不同步
如果你得到Commands out of sync; you can't run this command now
在客户端代码中,您正在以错误的顺序调用客户端函数。
例如,如果您正在使用mysql_use_result()并尝试在调用mysql_free_result()..。如果您尝试执行两个返回数据的查询而不调用mysql_use_result()或者mysql_store_result()介于两者之间。
本文(摘自这里here)
我已经解决了这个问题。我使用的是MySQL-Fron而不是MySQL查询浏览器。一切都运行得很好。
这让我觉得这不是服务器或数据库的问题,而是你使用的工具有问题。
发布于 2013-12-07 07:11:13
我能够用MySQL和phpmyadmin重现这个错误:
#2014 - Commands out of sync; you can't run this command now
在此版本的MySQL上:
el@apollo:~$ mysql --version
mysql Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2
通过phpmyadmin查询窗口运行以下SQL:
use my_database;
DELIMITER $$
CREATE PROCEDURE foo()
BEGIN
select 'derp' as 'msg';
END $$
CALL foo()$$ <----Error happens here, with or without delimiters.
我无法通过MySQL终端获取错误,所以我认为这是phpmyadmin的错误。
它在终端上运行良好:
mysql> delimiter $$
mysql> use my_database$$ create procedure foo() begin select 'derp' as 'msg'; end $$ call foo() $$
Database changed
Query OK, 0 rows affected (0.00 sec)
+------+
| msg |
+------+
| derp |
+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
我认为这个bug与在phpmyadmin中更改查询中的分隔符有关。
解决方法:放慢速度,牛仔,在使用phpmyadmin时,一次运行一条SQL语句。phpmyadmin是“单任务bob",他只能做一项工作。
发布于 2020-11-06 15:17:05
在我的例子中,我的存储过程中有以下结构:
DELIMITER //
DROP PROCEDURE IF EXISTS processcolumns;
CREATE PROCEDURE processcolumns ()
BEGIN
(...)
END //
DELIMITER ;
CALL processcolumns ();
DROP PROCEDURE processcolumns;
问题在于:DROP PROCEDURE IF EXISTS processcolumns;
我去掉了分号;并将其替换为分隔符//如下所示:
DROP PROCEDURE IF EXISTS processcolumns //
现在问题解决了!
https://stackoverflow.com/questions/8891179
复制相似问题