PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Dichiara una variabile di tipo composito in PostgreSQL usando %TYPE

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