Можно ли обновить New in перед вставкой триггера в sqlite? - PullRequest
12 голосов
/ 20 февраля 2012

Например:

create table test (id numeric, t date not null);

create trigger test_in
before insert on test
for each row
when New.t is null
begin
 -- set New.t = now();
end;

Установить New.t не работал, где можно только выбрать / вставить / обновить / удалить stmt. Я не могу изменить структуру базы данных (могу установить значение по умолчанию). Триггер после вставки также не подходит из-за ограничения «не ноль». Единственное решение, которое я нашел:

insert into test values (New.id, now());
select raise(ignore);

тестирование базы данных только для иллюстративных целей, на практике встречаются более сложные случаи с расчетными данными. Может быть что-то вроде этого «обновить New set New.t = now ()», или нет?

1 Ответ

9 голосов
/ 02 марта 2012

Нет, вы не можете обновить NEW.

Я обычно использую VIEW с триггером INSTEAD OF, так как мю коротко комментирует.

В вашем случае лучшийРешением может быть использование триггера AFTER INSERT / UPDATE WHEN NEW.t IS NULL для обновления t в затронутых строках:

CREATE TRIGGER test_in
AFTER INSERT ON test
FOR EACH ROW
WHEN (NEW.t IS NULL)
BEGIN
   UPDATE test SET t = now() WHERE id = NEW.id;
END;

FYI, ваш столбец id, вероятно, должен быть объявлен как INTEGERПЕРВИЧНЫЙ КЛЮЧ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...