0

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

-- --------------------------------------------------------------------------------
-- 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

我在上面的代码中得到了一个cross符号。EVENT archivescheduler我正在关注MySQL 网站上的以下文档。难道我做错了什么?

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

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

谢谢

4

1 回答 1

1

根据文档,您不能在过程主体内创建事件。请参阅这篇文章在过程中创建事件 - 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;
于 2014-06-13T22:17:44.160 回答