UPDATE OR INSERT
<< UPDATE | FB 2.5 Language Reference | Transaction control statements >>
<< UPDATE | FB 2.1 Language Reference | Transaction control statements >>
UPDATE OR INSERT
Added in: 2.1
Description
UPDATE OR INSERT
checks if any existing records already contain the new values supplied for the MATCHING
columns. If so, those records are updated. If not, a new record is inserted. In the absence of a MATCHING
clause, matching is done against the primary key. If a RETURNING
clause is present and more than one matching record is found, an error is raised.
Syntax
UPDATE OR INSERT INTO {tablename | viewname} [(<columns>)] VALUES (<values>) [MATCHING (<columns>)] [RETURNING <values> [INTO <variables>]] <columns> ::= colname [, colname ...] <values> ::= value [, value ...] <variables> ::= :varname [, :varname ...]
Restrictions:
- No column may appear more than once in the update/insert column list.
- If the table has no
PK
, theMATCHING
clause becomes mandatory. - The
INTO <variables>
subclause is only available in PSQL. - When returning values into the context variable
NEW
, this name must not be preceded by a colon (“:
”).
Example
update or insert into Cows (Name, Number, Location) values ('Suzie Moo', 3278823, 'Green Pastures') matching (Number) returning rec_id into :id;
Notes:
- Matches are determined with
IS NOT DISTINCT
, not with the "=
" operator. This means that oneNULL
matches another. - The optional
RETURNING
clause:- ...may contain any or all columns of the target table, regardless if they were mentioned earlier in the statement, but also other expressions.
- ...may contain
OLD
andNEW
qualifiers for field names; by default, the new field value is returned. - ...returns field values as they are after the
BEFORE
triggers have run, but before anyAFTER
triggers.
See also:
UPDATE
UPDATE
DELETE
INSERT
SELECT
back to top of page
<< UPDATE | FB 2.5 Language Reference | Transaction control statements >>
<< UPDATE | FB 2.1 Language Reference | Transaction control statements >>