PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Declare variável de tipo composto no PostgreSQL usando %TYPE


Use %ROWTYPE nesse caso.

Editar - caso simples


Testes de A.H. e DavidEG mostraram que isso não funcionará. Problema interessante!
Você pode tentar uma solução alternativa . Contanto que sua definição seja como o exemplo, você pode simplesmente recorrer a
CREATE FUNCTION test(param1 comp_type)
  RETURNS integer AS
$BODY$ 
DECLARE
    myvar comp_type;
BEGIN
    return 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Mas seu problema real provavelmente não é tão simples assim?

Editar 2 - o verdadeiro problema


Como esperado, o problema real é mais complexo:um tipo de entrada polimórfico .
Solução para esse cenário foi mais difícil, mas deve funcionar perfeitamente:
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;

Ligar:
SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar

Veja a saída completa:
SELECT * FROM test('("foo")'::comp_type);

Observação para PostgreSQL 9.0+


Houve uma atualização crucial na v9.0. Cito as notas de versão :

Portanto, além da minha solução alternativa, você pode utilizar variáveis ​​de entrada diretamente.

Nomes de arquivo dinâmicos