Existují různé možnosti v závislosti na úplném obrázku.
V zásadě by funkce vkládání mohla fungovat takto:
CREATE FUNCTION insert_thing (_thing flavored_view)
RETURNS int AS
$func$
INSERT INTO things (name) VALUES ($1.name) -- plus 30 more columns
RETURNING id;
$func$ LANGUAGE sql;
Pomocí typu řádku zobrazení , protože NEW
ve vašem spouštěči je tohoto typu.
Použijte jednoduchou funkci SQL, která může být vložena a může fungovat lépe.
Demo volání:
SELECT insert_thing('(1, foo, 1, bar)');
Uvnitř spouštěče flavored_trig ()
:
inserted_id := insert_thing(NEW);
Nebo v podstatě přepsáno:
IF TG_OP = 'INSERT' THEN
INSERT INTO flavored_things(thing_id, flavor)
VALUES (insert_thing(NEW), NEW.flavor);
RETURN NEW;
ELSIF ...
není platný typ mimo PL/pgSQL, je to pouze obecný zástupný symbol pro dosud neznámý typ řádku v PL/pgSQL), takže jej nemůžete použít pro vstupní parametr v deklaraci funkce.record
Pro dynamičtější funkci akceptující různé typy řádků můžete použít polymorfní typ . Příklady:
- Jak vrátit tabulku podle typu řádku v PL/pgSQL
- Refaktorujte funkci PL/pgSQL tak, aby vrátila výstup různých SELECT dotazů
- Jak napsat funkci, která vrací textové nebo celočíselné hodnoty?