在select查询中使用变量

时间:2014-12-15 06:54:12

标签: mysql stored-procedures

我正在尝试从表中获取计数值并使用存储过程中的select语句将其存储在变量中。但是当我使用以下行的状态时

DECLARE totalRegister INTEGER;
SET @sqlstmt = CONCAT('SELECT COUNT(DISTINCT(msisdn)) INTO ', totalRegister, ' FROM    sm_history.svc_mgmt_', @yesterdayMonth,' WHERE action_type = 1 AND DATE(created) = ', yesterday);

PREPARE statement FROM @sqlstmt;
EXECUTE statement;
DEALLOCATE PREPARE statement;

我在调用存储过程时遇到以下错误

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“NULL”附近使用正确的语法

我使用选择@sql; 进一步调试了我的存储过程,并惊讶地看到它返回NULL

编辑1:昨天和昨天的变量正确返回值,所以我确信这些变量没有问题。问题是由于totalRegister变量

1 个答案:

答案 0 :(得分:0)

幸运的是,我通过使用点击和试用获得了解决方案。而不是在CONCAT函数中使用totalRegister作为变量,而是将其替换为@totalRegister,这导致存储过程正常工作。

DECLARE totalRegister INTEGER;
SET @sqlstmt = CONCAT('SELECT COUNT(DISTINCT(msisdn)) INTO @totalRegister FROM sm_history.svc_mgmt_',@yesterdayMonth ,' WHERE action_type = 1 AND DATE(created) = ', "'", yesterday, "'");
PREPARE statement FROM @sqlstmt;
EXECUTE statement;
DEALLOCATE PREPARE statement;
select @totalRegister;

以上的事情很好。无论如何,感谢所有的贡献