Usar %ROWTYPE
en ese caso.
Editar - caso simple
Las pruebas realizadas por A.H. y DavidEG han demostrado que esto no funcionará. ¡Problema interesante!
Podría intentar una solución alternativa . Siempre que su definición sea como el ejemplo, simplemente puede recurrir a
CREATE FUNCTION test(param1 comp_type)
RETURNS integer AS
$BODY$
DECLARE
myvar comp_type;
BEGIN
return 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
¿Pero su verdadero problema probablemente no sea tan simple como eso?
Edición 2:el verdadero problema
Como era de esperar, el problema real es más complejo:un tipo de entrada polimórfica .
Solución alternativa para ese escenario fue más difícil, pero debería funcionar sin problemas:
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;
Llamar:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
Ver salida completa:
SELECT * FROM test('("foo")'::comp_type);
Nota para PostgreSQL 9.0+
Ha habido una actualización crucial en v9.0. Cito las notas de la versión :
Ergo, además de mi solución alternativa, puede utilizar variables de entrada directamente.
Nombres de archivos dinámicos
- Cómo clonar un GRABAR en PostgreSQL
- Cómo establecer el valor del campo variable compuesto usando SQL dinámico