SELECT max () внутри триггера возвращает NULL, отдельно возвращает ненулевое значение - PullRequest
0 голосов
/ 29 января 2020

Рассмотрим следующую схему:

Таблица 1: Schedule_items

id | id_schedule | id_element | id_type | id_parent | creation_time

Таблица 2: Schedule_items_tree

id_rel | id_schedule | descendant | ancestor | depth | sequence

Цель второй таблицы - сохранить отношения между пунктами расписания. Чтобы сделать это возможным, всякий раз, когда я добавляю новую строку в таблицу 1, запускается триггер после вставки, и новые строки добавляются в таблицу 2. Триггер имеет 3 шага:

  1. Добавить себя -relation;
  2. Добавить отношение между новым элементом и данным родителем
  3. Добавить отношение между новым элементом и всеми потомками (на основе родительского элемента).

В настоящее время я делаю возникла проблема с шагом 2, который выглядит следующим образом:

-- STEP 2: RELATION BETWEEN NEW ITEM AND GIVEN PARENT

        SELECT max(`sequence`)+1 INTO @v_seq FROM `schedule_items_tree` WHERE `id_schedule` = new.`id_schedule` AND `descendant` = new.`id_parent`;

        IF(v_seq IS NULL) THEN

            INSERT INTO `test` (`text`) VALUES ("Trigger forced sequence number to 1");
            SET v_seq = 1;

        END IF;

        -- proceed only if ancestor is not the same as descendant (self reference)
        IF(new.`id_parent` IS NOT NULL AND new.`id_element` != new.`id_parent`) THEN

            INSERT INTO `schedule_items_tree` (`id_schedule`,`descendant`,`ancestor`,`depth`,`sequence`) VALUES (new.`id_schedule`, new.`id_parent`, new.`id_element`, 1, v_seq);
        END IF;
    -- END OF STEP 2

Запрос SELECT max(sequence)+1 все время возвращает NULL (моя временная таблица получает новую запись при каждом запуске триггера; таблица создается только для устранения неполадок). Это совершенно странно, потому что выполнение того же запроса SELECT с теми же значениями, что и из результатов триггера с ненулевым значением.

Что бы я ни пытался (по-разному настраивая v_seq), оно закончилось тем же результатом NULL. Любые советы, как сделать шаг этого триггера работающим?

...