Der er forskellige muligheder, afhængigt af det komplette billede.
Din indsættelsesfunktion kunne grundlæggende fungere sådan her:
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;
Brug af rækketypen for visningen , fordi NEW
i din trigger er af denne type.
Brug en simpel SQL-funktion, som kan indlejres og muligvis yder bedre.
Demoopkald:
SELECT insert_thing('(1, foo, 1, bar)');
Inde i din trigger flavored_trig ()
:
inserted_id := insert_thing(NEW);
Eller dybest set omskrevet:
IF TG_OP = 'INSERT' THEN
INSERT INTO flavored_things(thing_id, flavor)
VALUES (insert_thing(NEW), NEW.flavor);
RETURN NEW;
ELSIF ...
er ikke en gyldig type uden for PL/pgSQL, det er bare en generisk pladsholder for en endnu ukendt rækketype i PL/pgSQL), så du kan ikke bruge den til en inputparameter i en funktionserklæring.record
For en mere dynamisk funktion, der accepterer forskellige rækketyper du kan bruge en polymorf type . Eksempler:
- Sådan returneres en tabel efter rækketype i PL/pgSQL
- Refaktorer en PL/pgSQL-funktion for at returnere output fra forskellige SELECT-forespørgsler
- Hvordan skriver man en funktion, der returnerer tekst- eller heltalsværdier?