UPDATE OR INSERT

Модификация или вставка записи

Версии сервера

0.91.01.5.31.5.41.5.52.02.0.32.0.42.12.53.0
--------ДаДаДа

Доступно в

DSQL PSQL

Формат

UPDATE OR INSERT INTO

[(<column_list>)] VALUES (<value_list>) [MATCHING (<column_list>)] [RETURNING <column_list> [INTO <variable_list>]]

Описание

В таблице проводится поиск по полям перечисленным в MATCHING.

Если записи нашлись - заменяем их. Иначе вставляем новые.

Если MATCHING не указан, то используется PRIMARY_KEY

Для успешного :?:выполнения необходимы права как на INSERT так и на UPDATE таблицы

Для успешного ⚠️ выполнения returning запрос должен работать с одной записью a

Пример

Задача: Установить правильную валюту для страны “Украина”. Если этой страны нет, то завести :-)

update or insert into country (country, currency)
values ('Ukraine','hryvnia')
matching (country)

Выполняем скрипт пару раз и замечаем:

первое выполнение “1 record(s) was(were) inserted into COUNTRY” - произошла вставка

последующие “1 record(s) was(were) updated in COUNTRY” - апдейт

Ну и если учесть, что поле в MATCHING у нас совпадает с ключем таблицы, то можно смело сие предложение (matching) удалять

См. также

insert returning into update

Источник

Firebird_v2.1.0.ReleaseNotes.pdf

Обсуждение