我试图制作一个触发器,它会遍历两个单独的行集。我想为“朋友”提供某种通知。当用户是关系的一个或第二面(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
的第二个部分被忽略。
你能建议怎么做吗?