Utilizza %ROWTYPE
in tal caso.
Modifica - caso semplice
I test di AH e DavidEG hanno dimostrato che questo non funzionerà. Problema interessante!
Potresti provare una soluzione alternativa . Finché la tua definizione è come l'esempio puoi semplicemente ricorrere a
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Ma il tuo vero problema probabilmente non è così semplice?
Modifica 2:il vero problema
Come previsto, il vero problema è più complesso:un tipo di input polimorfico .
Soluzione alternativa perché quello scenario era più difficile, ma dovrebbe funzionare perfettamente:
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;
Chiama:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
Vedi l'output completo:
SELECT * FROM test('("foo")'::comp_type);
Nota per PostgreSQL 9.0+
C'è stato un aggiornamento cruciale nella v9.0. Cito le note sulla versione :
Ergo, oltre alla mia soluzione alternativa, puoi utilizzare direttamente le variabili di input.
Nomi dinamici dei file
- Come clonare un REGISTRA in PostgreSQL
- Come impostare il valore del campo della variabile composita utilizzando SQL dinamico