Задать вопрос
Zver2011
@Zver2011

В чем моя ошибка при создании триггера SQlite?

Здравствуйте!

Имеется таблица accounts со столбцами Active (Bool), СheckLimit (Bool), MaxLimit (Numeric), CheckCount (Numeric), LimitReached(Bool). Задача: выставить True в столбце LimitReached той строки, в которой поле Active is True, СheckLimit is True, CheckCount == MaxLimit после события обновления столбца LimitCount.

Строки привожу ниже, по условию подходят две строки (3 и 4), при обновлении поля LimitCount до 5 и 6 соответственно.
5edf272d955d3779736493.png

Пробовал создать триггер так, но не работает:
Код sqlite
CREATE TRIGGER SetCheckLimit
         AFTER UPDATE OF LimitCount
            ON accounts
      FOR EACH ROW
          WHEN ( ( (
                     SELECT Active
                       FROM accounts
                 )
                 IS 1) AND 
                 ( (
                     SELECT CheckLimit
                       FROM accounts
                 )
                 IS 1) AND 
                 ( (
                       SELECT CheckCount
                         FROM accounts
                   )
==               (
                     SELECT MaxLimit
                       FROM accounts
                 )
                 ) ) 
BEGIN
    UPDATE accounts
       SET LimitReached = 1;
END;


Пробовал начать с одного условия, например Active is True - так же не работает.
Судя по синтаксису, можно писать довольно сложные условия для триггера, значит я где то ошибся в выражении. В чем я ошибся?
Синтаксис выражений sqlite
5edf24f95fe5e922078534.gif
  • Вопрос задан
  • 203 просмотра
Подписаться 2 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Продвинутый SQL
    5 недель
    Далее
  • Яндекс Практикум
    SQL для разработки
    4 месяца
    Далее
  • Академия Eduson
    SQL-разработчик: тариф Базовый
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Что за адовые селекты в WHEN? У вас есть строки NEW и OLD, вот и пишите условия:
WHEN (NEW.Active = 1 AND NEW.CheckLimit = 1 AND NEW.CheckCount = NEW.MaxLimit)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Екатеринбург
от 50 000 до 90 000 ₽