Столбец таблицы должен быть обновлен после превышения его в sqlite - PullRequest
0 голосов
/ 10 января 2020

Я использую sqlite в качестве бэкэнда для приложения. У меня есть таблица с именем «student» и в ней есть такие столбцы, как имя студента, id студента, год студента-присоединения (с датой и временем), вычеркнутый студентом (с датой и временем), статус студента , Я вставляю имя студента, идентификатор студента, год студента присоединения, вычеркнутый студентом из самого начала. После того, как студент автоматически покинул колледж, его статус должен быть изменен на «потерян».

Я пытался использовать sqlite триггер, он не работает должным образом

create trigger student-passed-out after update on student when student-passed-out<=datetime(now)begin update set candidate_status='Passed'

Здесь студент включается в разные дату и время. Я хочу, чтобы по истечении или превышении времени ожидания ученика статус изменился.

1 Ответ

1 голос
/ 10 января 2020

Согласно sqlite do c:

И предложение WHEN, и действия триггера могут получать доступ к элементам вставляемой, удаляемой или обновляемой строки, используя ссылки на form "NEW.column-name" и "OLD.column-name", где column-name - это имя столбца из таблицы, с которой связан триггер. Ссылки OLD и NEW могут использоваться только в триггерах для событий для
, для которых они важны, следующим образом:

INSERT NEW ссылки действительны

UPDATE NEW и OLD ссылки действительны

УДАЛИТЬ Старые ссылки действительны

Для имени столбца в предложении WHEN требуется префикс NEW. или OLD..

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

В предложении update в триггере отсутствует имя таблицы (и, вероятно, в предложении WHERE, как написано, оно обновит каждой строки в таблице ).

- ADDENDA -

  • Триггер before update выполняется, очевидно, до обновления записи в базе данных. Но что будет дальше? «Фактическое» обновление происходит. В этом случае столбец candidate_status вернется к тому, что было до запуска триггера. Возможно, попробуйте триггер after update.
  • синтаксис для текущей даты / времени: datetime('now')
  • В этом update set candidate_status='PASSED'; отсутствует имя таблицы и предложение WHERE, Без предложения WHERE будут обновляться каждой строки в таблице . Возможно, вам нужно что-то вроде WHERE student_id = OLD.student_id.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...