【发布时间】:2021-05-03 08:24:17
【问题描述】:
我一直在尝试将准备好的语句中的结果转换为变量。我环顾四周,发现了我想做的事情,但是我不确定如何正确实现它。这就是我尝试过的方式,但是当我运行它时,它会在表格中插入空白。
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 ' ,TableName, ' 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 ;
【问题讨论】:
-
我会使用 select..into 和 SET activitycount 顺便说一句,您可以将 2 列选择为 2 个变量。
-
我已经尝试过了,但是我从表名中提取的表会根据传递到过程中的用户而改变。这需要动态sql语句,因此使用准备好的语句,即使1是表的计数,您可以选择2个变量吗?
-
啊,我好像没听懂你在说什么。
标签: mysql variables stored-procedures mysql-workbench prepared-statement