Mysql 使用一个事件执行两个过程

Mysql 使用一个事件执行两个过程,mysql,events,stored-procedures,Mysql,Events,Stored Procedures,我希望依次执行上述两个过程“sp_通知”和“sp_通知状态”,但只执行“sp_通知”过程 如何使用一个事件执行两个过程?我想您需要: CREATE EVENT EVENT_NOTIFICATION ON SCHEDULE EVERY 1 DAY STARTS '2013-10-15 15:42:00' COMMENT 'Insert Notification' DO CALL sp_Notification(); SP_notificationStatus(); 您还可以创建一个新过程来调用这

我希望依次执行上述两个过程“sp_通知”和“sp_通知状态”,但只执行“sp_通知”过程

如何使用一个事件执行两个过程?

我想您需要:

CREATE EVENT EVENT_NOTIFICATION
ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-15 15:42:00'
COMMENT 'Insert Notification'
DO CALL
sp_Notification();
SP_notificationStatus();
您还可以创建一个新过程来调用这两个语句,然后安排一次。

您缺少一个CALL语句:

CREATE EVENT EVENT_NOTIFICATION
ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-15 15:42:00'
COMMENT 'Insert Notification'
DO CALL
sp_Notification();

CREATE EVENT EVENT_NOTIFICATION
ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-15 15:42:00'
COMMENT 'Insert Notification'
DO CALL
SP_notificationStatus();

以下配置运行两个存储过程:

/*!50106设置全局事件_调度程序=1*/; /*表“通知”的表结构*/ 如果存在“通知”,则删除表; 创建表“通知” `id`INT10无符号非空自动增量, `mydate`DATETIME默认值为空, 主键'id` 引擎=INNODB; /*表“notificationStatus”的表结构*/ 如果存在“notificationStatus”,则删除表; 创建表“notificationStatus” `id`INT10无符号非空自动增量, `mydate`DATETIME默认值为空, 主键'id` 引擎=INNODB; /*事件“事件通知”的事件结构*/ /*!50106删除事件(如果存在)`事件通知'*/; 分隔符$$ /*!50106按计划每5秒创建一次“事件通知” 在完成时启动“2013-10-12 00:00:00”,不保留启用 做 开始 调用'sp_Notification'; 调用'sp_notificationStatus'; 结束*/$$ 定界符; /*程序“sp_通知”的程序结构*/ /*!50003丢弃程序(如果存在)`sp_通知`*/; 分隔符$$ /*!50003创建程序“sp_通知”` 开始 立即将'notification``mydate`值插入'notification`; 结束*/$$ 定界符; /*程序“sp_notificationStatus”的程序结构*/ /*!50003删除程序(如果存在)`sp_notificationStatus`*/; 分隔符$$ /*!50003创建程序“sp_通知状态”` 开始 立即在'notificationStatus``mydate`值中插入; 结束*/$$ 定界符; 分隔符// 创建事件通知 按时 每1天从“2013-10-15 15:42:00”开始 注释“插入通知”DO 开始 呼叫sp_通知; 调用SP_notificationStatus;
结束//

我认为通过使用以下方法,您可以在一个事件中执行多个过程

CREATE EVENT EVENT_NOTIFICATION
ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-15 15:42:00'
COMMENT 'Insert Notification'
DO 
 BEGIN
  CALL sp_Notification();
  CALL SP_notificationStatus();
 END;

我遇到了同样的问题,第二个过程立即被调用,答案如下:

DELIMITER $$

CREATE EVENT Raju_RemoveExpiredItemsEvent
ON SCHEDULE EVERY 1 DAY

DO
  BEGIN
        CALL Raju_DeleteExpiredItems('comments');
        CALL Raju_DeleteExpiredItems('likes');
        END$$

DELIMITER ;

当我遇到类似问题时,上面的答案并不适用于我

我通过创建一个包含事件所需过程的新存储过程来解决这个问题

范例

如果


我想使用单个事件执行上述2个过程,请参见最后的注释。创建一个调用其他两个的新过程,并为您的活动调用该过程。直到我在答案中加入相同的解决方案,才看到您的最后一个注释。很好的解决方案。特别是当第二个程序依赖于第一个程序时,这将不起作用。首先它将创建一个事件,然后它将立即调用第二个过程。哎呀,现在它将使用开始/结束存储模块:
DELIMITER //                     -- THIS IS IMPORTANT!!!!
CREATE EVENT EVENT_NOTIFICATION
ON SCHEDULE
  EVERY 1 DAY 
  STARTS '2013-10-15 15:42:00'
COMMENT 'Insert Notification'
DO
BEGIN
  CALL sp_Notification();        -- Otherwise you event will end HERE after ;
  CALL SP_notificationStatus();
END;
END //                           -- Set delimiter back to ';'
DELIMITER ;
CREATE PROCEDURE `new_procedure` ()
BEGIN
   sp_Notification();
   SP_notificationStatus();
END
CREATE EVENT EVENT_NOTIFICATION
ON SCHEDULE
EVERY 1 DAY STARTS '2013-10-15 15:42:00'
COMMENT 'Insert Notification'
DO 
  CALL new_procedure();