%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
- Como clonar um GRAVAR no PostgreSQL
- Como definir o valor do campo de variável composta usando SQL dinâmico