从准备好的语句中获取结果到变量中

问题描述

我一直在尝试将准备好的语句的结果转换为变量。我环顾四周,找到了我想要做的事情,但是我不确定如何正确实现它。这是我尝试过的方法,但是当我运行它时,它会在表格中插入空白。

Drop procedure if exists campaignTEST;

DELIMITER  $$

Create procedure campaignTEST(in userID smallint)
sp_Campaign17:BEGIN

Declare activityCount mediumint;
Declare lastActivityDate DateTime;

Declare TableName varchar(64);

SET TableName = 'user_activity_';  
SET TableName = concat(TableName,convert(userID,char(64)));

SET @lastActivityDateTest = ('SELECT @date := date from ',TableName,' order by date desc limit 1;');  
    PREPARE stmt FROM @lastActivityDateTest;  
    EXECUTE stmt;  
    Select @date AS lastActivityDate;  
    DEALLOCATE PREPARE stmt;

SET @activityCountTest = ('Select @count := count(*) from ',' where Month(date) > Month(Date_SUB(CURRENT_date,Interval 1 month));');  
    PREPARE stmt FROM @activityCountTest;   
    EXECUTE stmt;  
    select @count as activityCount;
    DEALLOCATE PREPARE stmt;

INSERT INTO email_tracker
(activity_date,allocated)
Values
(lastActivityDate,activityCount)

END$$

DELIMITER ;

解决方法

在朋友的帮助下,我设法让它运行起来。

这些声明,

SET @lastActivityDateTest = ('SELECT @date := date from ',TableName,' order by date desc limit 1;');  
    PREPARE stmt FROM @lastActivityDateTest;  
    EXECUTE stmt;  
    Select @date AS lastActivityDate;  
    DEALLOCATE PREPARE stmt;

SET @activityCountTest = ('Select @count := count(*) from ',' where Month(date) > Month(Date_SUB(CURRENT_date,Interval 1 month));');  
    PREPARE stmt FROM @activityCountTest;   
    EXECUTE stmt;  
    select @count as activityCount;
    DEALLOCATE PREPARE stmt;

INSERT INTO email_tracker
(activity_date,allocated)
Values
(lastActivityDate,activityCount)

应该是这个

SET @statement = CONCAT('SELECT date into @result from ',' ORDER BY date DESC LIMIT 1');
PREPARE stmt FROM @statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @statement = CONCAT('SELECT count(*) into @result2 from ',Interval 1 month));');
PREPARE stmt FROM @statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

INSERT INTO email_tracker
(activity_date,allocated)
Values
(@result,@result2)