【问题标题】:MySql #2014 - Commands out of sync; you can't run this command now when calling a stored procedureMySql #2014 - 命令不同步;现在调用存储过程时无法运行此命令
【发布时间】:2019-03-05 15:03:59
【问题描述】:

我已经在 mySql 中成功创建了一个存储过程,当我尝试运行它时,它返回了

错误 静态分析:

在分析过程中发现了 1 个错误。

缺少表达式。 (位置 25 附近的“ON”) SQL 查询:编辑编辑

SET FOREIGN_KEY_CHECKS = ON;

MySQL 说:文档

#2014 - 命令不同步;你现在不能运行这个命令

我不知道如何解决这个问题,因为我的搜索并没有给我带来任何运气。我这样调用我的存储过程:

call getReport('2018-09-27','2018-09-27');

代码:

BEGIN 

SET @query := select * from history where date(`history`.`execDate`) between startDate and endDate;

PREPARE stmt FROM @query;
EXECUTE stmt;

END

我的存储过程需要两个日期参数。有时我的存储过程可以正常工作,而且我没有触及任何关于它的配置。我的查询也可以在我同事的电脑上运行,我认为问题已经出现在我身上,我不知道如何解决。

【问题讨论】:

  • 请在问题中添加您的存储过程代码
  • @MadhurBhaiya 查看更新。
  • 有人遇到并解决过此类问题吗?我真的需要你的帮助,拜托。
  • 你为什么使用Concat函数。我没有看到任何第二个字符串,您将数据连接到该字符串
  • 那个 set 语句无效,在 mysql 中抛出 1064 错误。您应该将字符串传递给@query。以及您为什么不释放准备好的语句的任何原因?

标签: mysql stored-procedures


【解决方案1】:
  • SET 语句语法错误。您使用 = 而不是 := 设置变量
  • 要准备完整的查询字符串,您没有正确使用Concat() 函数。 CONCAT 函数将字符串连接为不同的参数。
  • 另外,在执行 Prepared 语句后,你应该Deallocate它。

尝试以下方法:

BEGIN 

SET @query = CONCAT('select * from history where date(`history`.`execDate`) between ', 
                    startDate, 
                    ' and ', 
                    endDate);

PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 2012-03-27
    • 2013-12-27
    • 2020-12-24
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多