【发布时间】:2019-05-16 04:55:54
【问题描述】:
我在表 AcademicYearTermLevel 上插入后创建了一个触发器,该表使用从另一个查询中获取的游标值。我想在 while 循环中使用每个游标值并将行插入到表 SubjectYearTermLevel 中。
DROP TRIGGER IF EXISTS after_academicyearterm_insert
DELIMITER $$
CREATE TRIGGER after_academicyearterm_insert
AFTER INSERT
ON AcademicYearTerm
FOR EACH ROW
BEGIN
DECLARE temp INT;
DECLARE subj_done, form_done BOOLEAN DEFAULT FALSE;
DECLARE s_id INT;
DECLARE curSubject CURSOR FOR SELECT subject_id FROM Subject;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET subj_done = TRUE;
SET temp = 1;
OPEN curSubject;
cur_subject_loop: LOOP
FETCH FROM curSubject INTO s_id;
IF subj_done THEN
CLOSE curSubject;
LEAVE cur_subject_loop;
END IF;
WHILE temp <= 6 DO
INSERT INTO SubjectYearTermLevel VALUES (NULL, s_id, NEW.yearTerm_id, temp);
SET temp = temp + 1;
END WHILE
END LOOP cur_subject_loop;
END$$
DELIMITER ;
但问题是游标似乎只从SELECT 查询中获取一个值
【问题讨论】:
-
在数据库中,只有当且仅当所有其他可能性都失败时,才会将游标用作最后的手段。您的描述听起来应该可以通过连接两个结果集的单个查询来实现。您能否添加示例结果(例如表
subject的内容和预期结果 - 新行 - 在tableB中)。以及与插入行的关系(在tableA中) - 目前您似乎没有使用有关当前行的任何信息,这通常是触发器的内容。