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

Responder a