Brug %ROWTYPE
i så fald.
Rediger - simpel sag
Tests fra A.H. og DavidEG har vist, at dette ikke virker. Interessant problem!
Du kan prøve en løsning . Så længe din definition er som eksemplet, kan du simpelthen ty til
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Men dit egentlige problem er nok ikke så enkelt som det?
Rediger 2 - det virkelige problem
Som forventet er det virkelige problem mere komplekst:en polymorf inputtype .
Løsning for det scenarie var sværere, men burde fungere fejlfrit:
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;
Ring til:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
Se det fulde output:
SELECT * FROM test('("foo")'::comp_type);
Bemærkning til PostgreSQL 9.0+
Der har været en afgørende opdatering i v9.0. Jeg citerer udgivelsesbemærkningerne :
Ergo, ud over min løsning, kan du bruge inputvariabler direkte.
Dynamiske filnavne
- Sådan klones en OPTAG i PostgreSQL
- Sådan indstilles værdien af det sammensatte variabelfelt ved hjælp af dynamisk SQL