====== UPDATE OR INSERT ====== Модификация или вставка записи ===== Версии сервера ===== ^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.0.3 ^ 2.0.4 ^ 2.1 ^ 2.5 ^ 3.0 ^ | - | - | - | - | - | - | - | - | Да | Да | Да | ===== Доступно в ===== [[raznovidnosti_jazyka_sql|DSQL]] [[raznovidnosti_jazyka_sql|PSQL]] ===== Формат ===== UPDATE OR INSERT INTO [()] VALUES () [MATCHING ()] [RETURNING [INTO ]] ===== Описание ===== В таблице проводится поиск по полям перечисленным в 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