我正在Mysql中创建一个存储过程,其中我使用下面准备的语句从一个动态命名表中获取计数,并试图在@a中获取结果计数,但同时运行其显示错误。
错误:错误代码:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在第1行"NULL"附近使用的正确语法
SET prevDate=(CONCAT('details_',DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1
DAY),'%y%m%d')));
SET @qsql=CONCAT("SELECT COUNT(*) FROM ",prevDate," INTO @a");
PREPARE stmt FROM @qsql;
EXECUTE stmt;
SELECT @a AS detailcount ;
DEALLOCATE PREPARE stmt;
SET prevDate=(CONCAT('Subdetails_',DATE_FORMAT(DATE_SUB(CURDATE(),
INTERVAL 1 DAY),'%y%m%d')));
SET @qsql=CONCAT("SELECT COUNT(*) FROM ",prevDate," INTO @b");
PREPARE stmt FROM @qsql;
EXECUTE stmt;
SELECT @b AS Subdetails ;
DEALLOCATE PREPARE stmt;
SET totalcount=detailcount+Subdetails;
SELECT totalcount;
结果:获取totalcount=NULL,detailcount=NULL子细节=某些值
这里的错误是什么?
在执行两个准备好的查询后取消分配语句会得到所需的结果。
SET prevDate=(CONCAT('details_',DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1
DAY),'%y%m%d')));
SET @qsql=CONCAT("SELECT COUNT(*) FROM ",prevDate," INTO @a");
PREPARE stmt FROM @qsql;
EXECUTE stmt;
SELECT @a AS detailcount ;
SET prevDate=(CONCAT('Subdetails_',DATE_FORMAT(DATE_SUB(CURDATE(),
INTERVAL 1 DAY),'%y%m%d')));
SET @qsql=CONCAT("SELECT COUNT(*) FROM ",prevDate," INTO @b");
PREPARE stmt FROM @qsql;
EXECUTE stmt;
SELECT @b AS Subdetails ;
DEALLOCATE PREPARE stmt;
SET totalcount=detailcount+Subdetails;
SELECT totalcount;