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, theMATCHINGclause 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 oneNULLmatches another. - The optional
RETURNINGclause:- ...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
OLDandNEWqualifiers for field names; by default, the new field value is returned. - ...returns field values as they are after the
BEFOREtriggers have run, but before anyAFTERtriggers.
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 >>







