sql >> Base de Datos >  >> RDS >> PostgreSQL

Declarar variable de tipo compuesto en PostgreSQL usando %TYPE

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