我正在尝试在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>
答案 0 :(得分:1)
我认为每个事件都在新会话中执行,而用户定义的变量具有会话范围。因此,您无法在事件中真正使用这些变量,并使其价值从一个事件执行到另一个事件继续存在。
这是一个展示它的测试:
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