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