Перейти к основному содержимому

Изменить или создать запись (upsert)

Типичная задача: при каждом запуске блока увеличивать значение поля на единицу.

Сложность в том, что:

  • При первом обращении записи в списке ещё нет — её нужно создать.
  • При последующих — запись уже есть, и её нужно изменять.
Как понять, что делать

В конструкторе нет отдельной «upsert»-операции. Решение — собрать её из двух действий: сначала пробуем изменить, а если записи нет — создаём её с дефолтными значениями.


Шаг 1. Попытка изменить запись

Первое действие изменяет запись и записывает в переменную result успешность операции:

  • result = 1 — запись существовала и была изменена.
  • result = 0 — записи не было, изменить нечего.

Изменить или создать запись 1


Шаг 2. Создание записи, если её не было

Через условие #{result} = 0 запускаем действие добавления новой записи со значениями по умолчанию.

Изменить или создать запись 2

примечание

Условие проверяется только если изменить запись не удалось — то есть создание сработает один раз, при самом первом запуске блока. На всех последующих обращениях будет работать только первое действие (изменение).