【发布时间】:2020-06-28 00:26:37
【问题描述】:
我是 MySQL 新手,正在尝试编写一些 MySQL 存储过程,但遇到了一些我无法修复的错误。
重现错误的简单存储过程
DELIMITER //
DROP PROCEDURE IF EXISTS testing;
CREATE PROCEDURE testing(sqlQuery varchar(100))
BEGIN
PREPARE stmt FROM sqlQuery;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
我正在应用服务器上构建动态 sql 查询,并将其作为参数发送到 MySQL 数据库服务器。
为简单起见,我们假设 sqlQuery 包含SELECT * FROM Users。
当我第一次在 MySQL Workbench 中执行存储过程时,我得到:
Error Code: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sqlQuery; EXECUTE stmt ; DEALLOCATE PREPARE stmt; END' at line 5
当我第二次执行它时,我得到:
Error Code: 2014 Commands out of sync; you can't run this command now
我找不到这些错误背后的原因。有人可以提供一些信息吗?谢谢。
MySQL:8.0.19
MySQL 工作台:8.0.19
【问题讨论】:
-
该错误不可能来自您显示的程序。它说程序中有
q;这样的行。 -
提示 - 如果您是 MySQL 新手,请不要从 SP 开始。它们很难调试,即使你得到了正确的。它们的用处也被大大夸大了,尤其是那些不这样做的老师。
-
@Barmar 对不起,我已在帖子中将参数名称更改为更有意义的名称,但从控制台复制了错误,但未将参数名称从
q更改为sqlQuery。 -
@danblack 即使您有多年的 MySQL 经验,也不应该使用存储过程。 :-)
-
此外,版本控制方面经常被忽视。随着新访问尝试使用现有方法,导致 SQL 效率下降。
标签: mysql sql stored-procedures