全体像に応じて、さまざまなオプションがあります。
基本的に、挿入機能は次のように機能します。
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;
ビューの行タイプを使用する 、NEW
トリガーにはこのタイプがあります。
単純なSQL関数を使用します。これはインライン化でき、パフォーマンスが向上する可能性があります。
デモコール:
SELECT insert_thing('(1, foo, 1, bar)');
トリガー内flavored_trig ()
:
inserted_id := insert_thing(NEW);
または、基本的に書き直しました:
IF TG_OP = 'INSERT' THEN
INSERT INTO flavored_things(thing_id, flavor)
VALUES (insert_thing(NEW), NEW.flavor);
RETURN NEW;
ELSIF ...
record
ストライク> はPL/pgSQLの外部では有効な型ではなく、PL / pgSQLのまだ不明な行型の一般的なプレースホルダーであるため、関数宣言の入力パラメータに使用することはできません。
さまざまな行タイプを受け入れるより動的な関数の場合 を使用できます。ポリモーフィックタイプ 。例:
- PL/pgSQLで行タイプごとにテーブルを返す方法
- PL / pgSQL関数をリファクタリングして、さまざまなSELECTクエリの出力を返します
- テキストまたは整数値を返す関数を作成するにはどうすればよいですか?