我试图在mysql中创建一个报表调度,但是查询依赖于局部变量fdate。如何让mysql加载fdate变量,然后在第二个事件中运行查询?谢谢
CREATE EVENT fdate
ON SCHEDULE
EVERY 1 DAY
starts '2018-03-26 07:30:00'
Do
set @fdate = 2018031; #EOM prior month
create event report_1 on SCHEDULE
EVERY 1 day
starts '2018-03-26 07:31:00'
DO
<Here is the Query depending up fdate>
最佳答案
我认为每个事件都在一个新的会话中执行,并且用户定义的变量具有会话作用域。因此,您不能在事件中真正使用这些变量,并使它们的值从一个事件执行到另一个事件执行。
下面是一个测试:
mysql> create table log ( i int );
mysql> create event e on schedule every 1 minute do
-> insert into log set i = @a := coalesce(@a+1, 1);
如果
@a
变量从一个事件执行到下一个事件执行保留其值,我们将在我的log
表中获得一系列递增值。几分钟后,我们发现我们没有得到递增的值。每次执行从1开始计数器。
mysql> select * from log;
+------+
| i |
+------+
| 1 |
| 1 |
| 1 |
+------+
但您可以
DECLARE
一个局部变量,并在事件的复合语句体中使用它。CREATE EVENT fdate
ON SCHEDULE
EVERY 1 DAY
STARTS '2018-03-26 07:30:00'
DO BEGIN
DECLARE fdate INT;
SET fdate = DATE_FORMAT(LAST_DAY(CURDATE() - INTERVAL 1 MONTH), '%Y%m%d');
# following query uses fdate
END