Ada berbagai opsi, tergantung pada gambaran lengkapnya.
Pada dasarnya, fungsi insert Anda bisa bekerja seperti ini:
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;
Menggunakan jenis baris tampilan , karena NEW
di pemicu Anda adalah jenis ini.
Gunakan fungsi SQL sederhana, yang dapat digarisbawahi dan mungkin berkinerja lebih baik.
Panggilan demo:
SELECT insert_thing('(1, foo, 1, bar)');
Di dalam pemicu Anda flavored_trig ()
:
inserted_id := insert_thing(NEW);
Atau, pada dasarnya ditulis ulang:
IF TG_OP = 'INSERT' THEN
INSERT INTO flavored_things(thing_id, flavor)
VALUES (insert_thing(NEW), NEW.flavor);
RETURN NEW;
ELSIF ...
bukan tipe yang valid di luar PL/pgSQL, ini hanya pengganti generik untuk tipe baris yang belum diketahui di PL/pgSQL) sehingga Anda tidak dapat menggunakannya untuk parameter input dalam deklarasi fungsi.record
Untuk fungsi yang lebih dinamis menerima berbagai jenis baris anda dapat menggunakan tipe polimorfik . Contoh:
- Cara mengembalikan tabel menurut tipe baris di PL/pgSQL
- Perbaiki fungsi PL/pgSQL untuk mengembalikan output dari berbagai kueri SELECT
- Bagaimana cara menulis fungsi yang mengembalikan nilai teks atau bilangan bulat?