Použijte %ROWTYPE
v tom případě.
Upravit – jednoduchý případ
Testy A.H. a DavidEG ukázaly, že to nebude fungovat. Zajímavý problém!
Můžete zkusit řešení . Pokud je vaše definice jako v příkladu, můžete se jednoduše uchýlit k
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Ale váš skutečný problém pravděpodobně není tak jednoduchý?
Úprava 2 – skutečný problém
Jak se dalo očekávat, skutečný problém je složitější:polymorfní typ vstupu .
Řešení tento scénář byl těžší, ale měl by fungovat bezchybně:
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;
Volejte:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
Zobrazit úplný výstup:
SELECT * FROM test('("foo")'::comp_type);
Poznámka pro PostgreSQL 9.0+
Ve verzi 9.0 došlo k zásadní aktualizaci. Cituji poznámky k vydání :
Takže kromě mého řešení můžete přímo využívat vstupní proměnné.