Istnieją różne opcje, w zależności od pełnego obrazu.
Zasadniczo funkcja wstawiania może działać tak:
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;
Korzystanie z typu wiersza widoku , ponieważ NEW
w wyzwalaczu jest tego typu.
Użyj prostej funkcji SQL, która może być wbudowana i może działać lepiej.
Rozmowa demonstracyjna:
SELECT insert_thing('(1, foo, 1, bar)');
Wewnątrz wyzwalacza flavored_trig ()
:
inserted_id := insert_thing(NEW);
Albo po prostu przepisane:
IF TG_OP = 'INSERT' THEN
INSERT INTO flavored_things(thing_id, flavor)
VALUES (insert_thing(NEW), NEW.flavor);
RETURN NEW;
ELSIF ...
nie jest prawidłowym typem poza PL/pgSQL, to tylko ogólny symbol zastępczy dla jeszcze nieznanego typu wiersza w PL/pgSQL), więc nie można go użyć jako parametru wejściowego w deklaracji funkcji.record
Aby uzyskać bardziej dynamiczną funkcję akceptującą różne typy wierszy możesz użyć typ polimorficzny . Przykłady:
- Jak zwrócić tabelę według typu wiersza w PL/pgSQL
- Refaktoryzuj funkcję PL/pgSQL, aby zwrócić dane wyjściowe różnych zapytań SELECT
- Jak napisać funkcję, która zwraca tekst lub wartości całkowite?