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
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Что за адовые селекты в WHEN? У вас есть строки NEW и OLD, вот и пишите условия:
WHEN (NEW.Active = 1 AND NEW.CheckLimit = 1 AND NEW.CheckCount = NEW.MaxLimit)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы