MYSQL触发器游标遍历示例

项目使用mysql数据库,有个系统消息功能需要一个触发器,当一个表插入数据时,向另外一个表插入多条数据。下面是完整示例代码,包括游标遍历,插入数据。

 DELIMITER USE `mydb`

DROP TRIGGER /*!50032 IF EXISTS */ `t_insertsystemmsg`CREATE
    /*!50017 DEFINER = 'root'@'%' */
    TRIGGER `t_insertsystemmsg` AFTER INSERT ON `MY_INFO_M` 
    FOR EACH ROW BEGIN
  -- 需要定义接收游标数据的变量 
  DECLARE usercode1 VARCHAR (100);
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT FALSE ;
  
    -- 游标
  DECLARE cur1 CURSOR FOR SELECT DISTINCT usercode FROM MY_USERINFO_M ;
  
  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE ;
  
  -- 打开游标
  OPEN cur1 ;
  
  -- 开始循环
  read_loop:LOOP
    -- 提取游标里的数据,这里只有一个,多个的话也一样;
    FETCH cur1 INTO usercode1 ;
    -- 声明结束的时候
    IF done 
    THEN LEAVE read_loop ;
    END IF ;
    -- 这里做你想做的循环的事件
    INSERT INTO MY_SYSTEMMSG_T (
      usercode,
      msg,
      msgtype,
      readflg,
      createdate,
      updatetime
    ) 
    VALUES
      (
        usercode1,
        CONCAT(
          new.apialias,
          '添加了,欢迎使用!'
        ),
        1,
        '0',
        CURRENT_TIMESTAMP,
        CURRENT_TIMESTAMP
      ) ;
  END LOOP ;
  
  -- 关闭游标
  CLOSE cur1 ;
END;

DELIMITER ;