mysql - 在 mysql workbench 5.5 上定义事件名称时出现错误

标签 mysql stored-procedures mysql-5.5 mysql-event

我创建了一个如下所示的存储过程:

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

CREATE DEFINER=`MailMe`@`%` PROCEDURE `sp_archivev3`()
BEGIN

INSERT INTO 
     send.sgev3_archive(a_bi,
                        b_vc,
                        c_int,
                        d_int,
                        e_vc,
                        f_vc,
                        g_vc,
                        h_vc,
                        i_dt,
                        j_vc,
                        k_vc,
                        l_vc,
                        m_dt,
                        n_vch,
                        o_bit)
SELECT     a_bi,
           b_vc,
           c_int,
           d_int,
           e_vc,
           f_vc,
           g_vc,
           h_vc,
           i_dt,
           j_vc,
           k_vc,
           l_vc,
           m_dt,
           n_vch,
           o_bit

FROM   send.sgev3

WHERE m_dt BETWEEN  CURDATE() - INTERVAL 1 DAY AND CURDATE();


END

现在,我尝试在上述存储过程中创建一个事件,如下所示:

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

CREATE DEFINER=`MailMe`@`%` PROCEDURE `sp_archivev3`()

EVENT archivescheduler

ON SCHEDULE

EVERY 10 SECOND

DO BEGIN

INSERT INTO 
     send.sgev3_archive(a_bi,
                        b_vc,
                        c_int,
                        d_int,
                        e_vc,
                        f_vc,
                        g_vc,
                        h_vc,
                        i_dt,
                        j_vc,
                        k_vc,
                        l_vc,
                        m_dt,
                        n_vch,
                        o_bit)
SELECT     a_bi,
           b_vc,
           c_int,
           d_int,
           e_vc,
           f_vc,
           g_vc,
           h_vc,
           i_dt,
           j_vc,
           k_vc,
           l_vc,
           m_dt,
           n_vch,
           o_bit

FROM   send.sgev3

WHERE m_dt BETWEEN  CURDATE() - INTERVAL 1 DAY AND CURDATE();


END

在上面的代码中,我在 EVENT archivescheduler 行上看到了一个十字符号。我正在关注以下documentation在 MySQL 网站上。难道我做错了什么?

我怀疑的是,由于我之前已经创建了存储过程并且我正在尝试创建一个存储过程,因此这可能会产生一些问题。请让我知道我做错了什么?

作为错误的 MySQLWORKbench 的小屏幕截图:error

谢谢

最佳答案

根据文档,您无法在过程体内创建事件。看这篇文章Create an event inside a procedure - SQL .

您必须首先创建过程,然后从事件中调用它,如下所示

DELIMITER $$

CREATE DEFINER=`MailMe`@`%` PROCEDURE `sp_archivev3`()
BEGIN

INSERT INTO 
     send.sgev3_archive(a_bi,
                        b_vc,
                        c_int,
                        d_int,
                        e_vc,

<Rest of the code goes here>

然后创建调用该过程的事件

DELIMITER $$  
CREATE EVENT archivescheduler
ON SCHEDULE EVERY 10 SECOND
DO BEGIN
    CALL `sp_archivev3`();
END $$
DELIMITER ;

另一个提示:如果你的存储过程没有从事件中触发;您可能需要检查GLOBAL EVENT SCHEDULER是否处于DISABLE状态。您可以使用以下设置将其打开

SET GLOBAL event_scheduler = ON;

关于mysql - 在 mysql workbench 5.5 上定义事件名称时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24212273/

相关文章:

mysql - 将模式备份从 MySQL 5.6 恢复到 5.5

mysql - 对于一个表中的每组关键字,在第二个表中查找所有匹配的匹配项

sql-server - SQL Server 存储过程传递日期参数

mysql - MySQL 中的 Bcrypt?

sql - 如何每天自动运行一个存储过程

mysql - SELECT + INSERT + 查询缓存 = MySQL 锁定

mysql - 即使为 null、0 或不存在也返回值

javascript - 如何使用 sequelize 在一个数据库请求中将数据插入多个表?

php - mysql:将字符串连接到列

php - INSERT查询PHP e mySql引起的奇怪错误