Имеется таблица:
CREATE TABLE TREE (
IDCLIENT IDUSER NOT NULL,
IDPARENT IDUSER,
CCOUNT INTEGER DEFAULT 0, /* кол-во прямых потомков */
LEVEL1 INTEGER DEFAULT 0, /* уровень вложенности */
);
|
При изменении хозяина ветки, то есть IDPARENT, у детей срабатывает триггер,
который пересчитывает CCOUNT и LEVEL1 потомков:
CREATE TRIGGER TREE_BU FOR TREE
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
if (old.IDPARENT <> new.IDPARENT) then
begin
UPDATE tree D SET D.CCOUNT = D.CCOUNT - 1 WHERE D.IDCLIENT = old.IDPARENT;
UPDATE tree D SET D.CCOUNT = D.CCOUNT +1 WHERE D.IDCLIENT = new.IDPARENT;
SELECT MAX(D1.level1)+1 FROM tree D1 WHERE D1.IDCLIENT = new.IDPARENT INTO new.level1;
end
end
|
Не пойму почему он не персчитывает значения, если у потомков есть свои потомки.
Другими словами, не ведётся персчёт "детей" 2-го поколения и т.д. Для первого поколения всё проходит без проблем.
Что-то необходимо изменить в триггере?