Я много лет создавал и работал с триггерами в Oracle, однако я не могу понять, как обновить поле при вставке данных в базу данных sqlite.
Все, что я хочу сделать, - этосоздайте триггер, который автоматически вставляет текущий DateTime в столбец базы данных sqlite с именем 'createDate' для ЛЮБОЙ вставляемой записи.
Каков наилучший подход для достижения этой цели?
Ниже приведено то, что я пытался безуспешно.
CREATE TRIGGER outputLogDB_Created_Trig
BEFORE INSERT
ON outputLog
WHEN NEW.createdDate IS NULL
BEGIN
SELECT CASE WHEN NEW.createdDate IS NULL THEN NEW.createdDate = datetime('now', 'localtime') END;
END;
Вышеприведенный пример является почти точной копией того, как я реализовал бы свои триггеры в Oracle с некоторыми изменениями, конечно, для sqlite.Логика в основном идентична.
Чего мне не хватает?
Позднее редактирование - я могу заставить его работать, если вместо этого использую AFTER INSERT
, а не FOR EACH ROW
CREATE TRIGGER outputLog_Created_Trig
AFTER INSERT
ON outputLog
WHEN New.createdDate IS NULL
BEGIN
UPDATE outputLog
SET createdDate = datetime('now', 'localtime')
WHERE outputLog_ID = New.rowid;
END;
Но почему я не могу просто вставить запись, используя новое значение, пока я ее вставляю?Могу ли я получить ТОЛЬКО с помощью обновления ПОСЛЕ того, как я уже вставил запись?
Проблема, с которой я столкнулся, заключается в том, что я хотел бы иметь ограничение NOT NULL для столбца createDate.Возможно, я просто привык к тому, как я делал это годами в Oracle?Я понимаю, что триггер «должен» позаботиться о любой записи и заставить это поле никогда не быть пустым.Просто то, что я НЕ могу добавить ограничение по какой-то причине, делает меня неловким.Мне нужно отпустить это беспокойство?