繁体   English   中英

如何在存储过程中使用准备好的语句的结果

[英]How to use Result of prepared statement in the stored procedure

我正在 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=NULLdetailcount=NULLSubdetails=Some value

这里的错误是什么?

执行两个准备好的查询后解除分配语句给出所需的结果。

 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM