kid*_*yen 10 mysql stored-procedures
我正在使用MySQL,我正在定义一个这样的存储过程:
delimiter ;;
Create procedure sp_test()
select * from name_table;
end
Run Code Online (Sandbox Code Playgroud)
当我尝试执行该过程时,我收到此错误:
#2014 - Commands out of sync; you can't run this command now
Run Code Online (Sandbox Code Playgroud)
这意味着什么,我做错了什么?
Met*_*iel 13
就我而言,我的存储过程具有以下结构:
DELIMITER //
DROP PROCEDURE IF EXISTS processcolumns;
CREATE PROCEDURE processcolumns ()
BEGIN
(...)
END //
DELIMITER ;
CALL processcolumns ();
DROP PROCEDURE processcolumns;
Run Code Online (Sandbox Code Playgroud)
问题在于:DROP PROCEDURE IF EXISTS processcolumns;
我删除了分号;
并将其替换为分隔符,//
如下所示:
DROP PROCEDURE IF EXISTS processcolumns //
Run Code Online (Sandbox Code Playgroud)
现在已经解决了!
Mar*_*rco 12
来自手册
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()
在两者之间返回数据的查询,也会发生这种情况.
这篇文章(取自这里)
我已经解决了这个问题.我使用MySQL-Fron而不是MySQL Query浏览器.一切正常.
让我觉得它不是服务器或数据库问题,而是您正在使用的工具中的问题.
我能用MySQL和phpmyadmin重现这个错误:
#2014 - Commands out of sync; you can't run this command now
Run Code Online (Sandbox Code Playgroud)
在这个版本的MySQL上:
el@apollo:~$ mysql --version
mysql Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (x86_64) using readline 6.2
Run Code Online (Sandbox Code Playgroud)
使用以下SQL运行phpmyadmin查询窗口:
use my_database;
DELIMITER $$
CREATE PROCEDURE foo()
BEGIN
select 'derp' as 'msg';
END $$
CALL foo()$$ <----Error happens here, with or without delimiters.
Run Code Online (Sandbox Code Playgroud)
我无法通过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)
Run Code Online (Sandbox Code Playgroud)
我认为该bug与更改phpmyadmin中的分隔符中间分隔符有关.
解决方法:使用phpmyadmin时,减慢他们的牛仔并一次运行一个SQL语句.phpmyadmin是"单一任务鲍勃",他只能做一份工作.
归档时间: |
|
查看次数: |
60399 次 |
最近记录: |