как установить дату на текущую дату автоматически при вставке - PullRequest
0 голосов
/ 13 мая 2018

У меня есть следующая таблица

CREATE TABLE ex(
 id INTEGER PRIMARY KEY,
 dat DATE NOT NULL CHECK(dat IS date(dat))
);

И я хочу, чтобы дата автоматически устанавливалась на дату («сейчас») при каждой вставке.Вот почему я создал TRIGGER

CREATE TRIGGER setTrigger
         AFTER INSERT
            ON ex
FOR EACH ROW
BEGIN   
    UPDATE ex   
        SET dat = date('now')
    WHERE id = NEW.id;
END;

Но я получаю следующую ошибку:

too many levels of recursion

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вам не нужны триггеры для его.

CREATE TABLE `ex ` (  `id` INTEGER PRIMARY KEY,`dat` DATE NOT NULL DEFAULT (datetime('now')) )
0 голосов
/ 13 мая 2018

Попробуйте удалить FOR EACH ROW, в этом нет необходимости, и это может быть причиной рекурсии вместе с ограничением CHECK.

Конечно, вам даже не нужны ограничения TRIGGER или CHECK, которые вы можете использовать

CREATE TABLE ex(
 id INTEGER PRIMARY KEY,
 dat DATE DEFAULT CURRENT_DATE
);

Обратите внимание, что нужно сделать только два столбца INSERT INTO ex (ID) VALUES(null);

Вы также можете рассмотреть следующие вопросы: -

Максимальная глубина рекурсии триггера

SQLite ограничивает глубину рекурсии триггеров, чтобы предотвратить оператор с использованием рекурсивных триггеров от использования неограниченного количества памяти.

До SQLite версии 3.6.18 (2009-09-11) триггеры не были рекурсивный и поэтому этот предел был бессмысленным. Начиная с версии 3.6.18, рекурсивные триггеры были поддержаны, но их нужно было явно включить с помощью оператора PRAGMA recursive_triggers. Начиная с версия 3.7.0 (2009-09-11), рекурсивные триггеры включены по умолчанию но может быть отключен вручную с помощью PRAGMA recursive_triggers. SQLITE_MAX_TRIGGER_DEPTH имеет смысл, только если рекурсивные триггеры включен.

Максимальная глубина рекурсии по умолчанию составляет 1000.

Максимальная глубина рекурсии триггера

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