%ROWTYPE
を使用します
その場合。
編集-単純なケース
A.H.とDavidEGによるテストでは、これは機能しないことが示されています。興味深い問題です!
回避策を試すことができます 。あなたの定義が例のようである限り、あなたは単に頼ることができます
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
しかし、あなたの本当の問題はおそらくそれほど単純ではありませんか?
編集2-本当の問題
予想どおり、実際の問題はもっと複雑です。多態的な入力タイプ 。
回避策 そのシナリオではより困難でしたが、問題なく機能するはずです:
CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
RETURNS record AS
$BODY$
BEGIN
myvar := $1; -- myvar has now the required type.
--- do stuff with myvar.
myvar := NULL; -- reset if you don't want to output ..
a := 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
電話:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
完全な出力を見る:
SELECT * FROM test('("foo")'::comp_type);
PostgreSQL9.0以降に関する注意
v9.0には重要な更新があります。 リリースノート を引用します :
エルゴ、私の回避策に加えて、入力変数を直接利用できます。