LINUX.ORG.RU

Триггер для SQLite, устанавливающий следующее после максимального число

 ,


0

1

Никак не могу написать для SQLite триггер, который бы срабатывал после вставки данных (AFTER INSERT), и вставлял в поле с именем sort_order максимальное значение этого же поля + 1. Скорость срабатывания неважна.

Пытаюсь написать так:

CREATE TRIGGER [responses_sort_order] 
AFTER INSERT ON "responses" 
BEGIN 
 UPDATE responses SET sort_order=max(sort_order)+1 WHERE id IN (select max(id) from responses); 
END

Но не работает. При добавлении записи, в Firefox SQLite Manager вижу ошибку:

Exception Name: NS_ERROR_FAILURE
Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)

Вопрос. Как сделать триггер, который бы (при создании записи) вычислял для поля максимальное значение, и записывал в новую запись в это поле следующее после максимального число.

★★★★★

Я под этот SQLite почти не писал, но вот это выглядит странно:

SET sort_order=max(sort_order)+1

Потому что максимум запрашивается как бы от одной строчки, которая определена условием WHERE. Что если попробовать

UPDATE responses SET sort_order=(select max(sort_order) from responses)+1 WHERE id IN (select max(id) from responses); 
END
amomymous ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.