2013/4/30 izaque Maciel <[email protected]>
> Vou tentar explicar melhor. A functionX retorna uma linha, com colunas de
> tipos variados, e na functionY,
> preciso retornar uma linha ou várias linhas, e que nesta functionY, irei
> trabalhar os resultados das colunas
> na functionX, como por exemplo:
> *if* *(valor_documento is not null) then *
> * valor_documento := 0;*
> *end if;*
> *
> *
> Gostaria de saber:
> Que tipo de retorno é a functionY?
>
Se ela vai (ou pode) retornar várias linhas, então ela deve ser declarada
para retornar SETOF <tipo> ou TABLE. Exemplo:
CREATE OR REPLACE FUNCTION function_y(param1 tipo1, param2 tipo2, ...,
paramN tipoN)
RETURNS SETOF tipo_retorno
...
ou
CREATE OR REPLACE FUNCTION function_y(param1 tipo1, param2 tipo2, ...,
paramN tipoN)
RETURNS TABLE (retorno1 tipo_retorno1, ..., retornoN tipo_retornoN)
...
> Como pego o retorno da functionX para que eu possa fazer algumas
> verificações, como o exemplo acima?
>
>
Creio que a forma mais fácil seria a seguinte:
CREATE OR REPLACE FUNCTION function_y(param1 tipo1, param2 tipo2, ...,
paramN tipoN)
RETURNS ...
LANGUAGE plpgsql AS $$
DECLARE
v_funcx RECORD;
...
BEGIN
...
SELECT <colunas.. | *> INTO v_funcx FROM functionX(<params>);
IF (v_funcx.valor_documento IS NOT NULL) THEN
v_funcx.valor_documento := 0;
end if;
...
END;
$$;
Ou você pode pegar cada campo numa variável:
CREATE OR REPLACE FUNCTION function_y(param1 tipo1, param2 tipo2, ...,
paramN tipoN)
RETURNS ...
LANGUAGE plpgsql AS $$
DECLARE
v_valor_documento <tipo>;
v_outro_campo <tipo>;
...
BEGIN
...
SELECT f.valor_documento, f.outro_campo INTO v_valor_documento,
v_outro_campo
FROM functionX(<params>) AS f;
IF (v_valor_documento IS NOT NULL) THEN
v_valor_documento := 0;
end if;
...
END;
$$;
> Obrigado.
>
>
Sussa.
Atenciosamente,
--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral