mysql -在存储过程中创建事件

qlfbtfca  于 2023-03-11  发布在  Mysql
关注(0)|答案(3)|浏览(178)

如何在存储过程中创建事件?
这是我一直在尝试做的,它告诉我有一个语法错误,只是它没有告诉我在哪里。

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_leaderboard`()
BEGIN

CREATE EVENT update_leaderboard_event
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 minute
    DO call update_leaderboard();


END

**编辑:**根据我的MySql(最后一行),应该可以:

语法”“。可以将事件创建为存储例程的一部分,但事件不能由另一个事件创建。

Edit2发现问题:

错误1576:当正文存在时,禁止EVENT DDL语句递归
但是还没有解决办法,那我怎么办呢?

s5a0g9ez

s5a0g9ez1#

不能在过程内部创建。需要单独定义它。
只需检查Mysql Event Scheduler
详细博客:http://goo.gl/6Hzjvg

e5nqia27

e5nqia272#

“创建事件”和“更改事件”,我们通过直接“请求”MySQL引擎数据库在特殊外部应用程序中创建。
将触发器或过程中的行插入到专用表“Need create_alter event”和循环阅读行的专用外部应用程序中,然后直接向MySQL引擎数据库发送create/alter事件请求

hvvq6cgz

hvvq6cgz3#

这是不可能的。最接近的方法是使用字符串构建在SP内部创建一个预准备语句。然后将预准备语句保存到一个表“scheduled_queries”中。使用外部脚本(bash/python等)构建一个简单的“runner”来执行表“scheduled_queries”中的任何内容。

set @statement = concat("DROP EVENT IF EXISTS ", invalid_event); 
insert into scheduled_queries(query_str) values (@statement);

只有在大量使用创建/更改/删除事件的情况下才值得引入runner设置。

相关问题