MySQL触发两次迭代,两个游标?

时间:2014-03-25 10:31:04

标签: mysql loops triggers cursor

我试图制作一个触发器,它会遍历两个单独的行集。我想为“朋友”提供某种通知。当用户是关系的一个或第二面(profile_id或friend_profile_id)时,我需要迭代。

这是我到目前为止所尝试的内容:

BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE frid INT;
DECLARE cur CURSOR FOR SELECT friends.friend_profile_id FROM friends WHERE profile_id = NEW.profile_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;
  read_loop: LOOP
    IF done THEN
        LEAVE read_loop;
    END IF;
    FETCH cur INTO frid;

    INSERT INTO notification VALUES (NULL,NEW.profile_id,frid,NOW(),"001",0,NEW.thread_id);

  END LOOP read_loop;

CLOSE cur;
END

它运行良好(但不知何故,它最后一行INSERT两次(?))。

无论如何,我需要为第二面制作第二个光标:

DECLARE cur2 CURSOR FOR SELECT friends.profile_id FROM friends WHERE friend_profile_id = NEW.profile_id;

所以在最后CLOSE cur;之后我添加了第二个OPEN cur2;并尝试使用新变量对此游标进行第二次迭代。不幸的是它不起作用 - 只有第一个循环工作,cur2的第二个部分被忽略。

你能建议怎么做吗?

0 个答案:

没有答案