Jump to content
Fórum Script Brasil
  • 0

Function retornando resultado em formato JSON


ljsantos

Question

Olá boa dia a todos,

Estou com um problema num retorno de uma fuction no postgres. É uma query dinamica com variáveis de entrada status, vendedor, datas. Quando executo a function ele me retorna o resultado no formato JSON e não em colunas como eu desejo. Os filtros estão corretos, quando filtro pelas variáveis me retorna o resultado esperado, porém em formato JSON. Já revisei toda essa function e não estou encontrando o erro ou solução para que ela me retorne em colunas no formato de tabela. Se alguém me puder me ajudar , desde já agradeço muito.

Segue a function:

--DROP FUNCTION relacional.lista_pedido_site_status_data(varchar,varchar,date,date);
--SELECT relacional.lista_pedido_site_status_data('Gold', NULL,NULL,NULL);
CREATE OR REPLACE FUNCTION relacional.lista_pedido_site_status_data(v_status varchar, v_vendedor varchar, 
v_data_venda_ini date, v_data_venda_fim date)
 RETURNS TABLE(cliente character varying, status character varying, vendedor character varying, produto character varying, data_venda text, 
total numeric)
 LANGUAGE plpgsql
AS $function$

    declare v_initial_date text;
    declare v_nvendedor text;
    declare v_nstatus text;


BEGIN
    
    /*********************************************/
    IF v_data_venda_ini is NOT NULL AND v_data_venda_fim is NOT NULL THEN
        select v_data_venda_ini into v_data_venda_ini;
        select v_data_venda_fim into v_data_venda_fim;
        select ' and v.data between '''  || v_data_venda_ini ||  ''' and '''  || v_data_venda_fim ||''' '
        into v_initial_date;
    ELSEIF v_data_venda_ini is NOT NULL AND v_data_venda_fim is NULL THEN
        select v_data_venda_ini into v_data_venda_ini;
        select ' and v.data = ''' || v_data_venda_ini ||  ''' '
        into v_initial_date;
    ELSE v_initial_date  = '';
    END IF;

    /*********************************************/

    IF v_vendedor is NOT NULL THEN
        select ' and vd.nome = ''' || v_vendedor ||   ''' '
        into v_nvendedor;
    ELSE v_nvendedor = '';
    END IF;

    /*********************************************/

    IF v_status is NOT NULL THEN
        select ' and c.status = ''' || v_status ||  ''' '
        into v_nstatus;
    ELSE v_nstatus = '';
    END IF;

    /*********************************************/


RETURN QUERY
EXECUTE '
SELECT DISTINCT
               c.cliente,
               c.status,
               vd.nome as vendedor,
               p.produto,
               to_char(v.data, ''DD/MM/YYYY'') as data_venda,
               v.total
            
FROM relacional.vendas v
              inner join relacional.itensvenda it on it.idvenda = v.idvenda
              inner join relacional.produtos p on p.idproduto = it.idproduto
              inner join relacional.clientes c on c.idcliente = v.idcliente
              inner join relacional.vendedores vd on vd.idvendedor = v.idvendedor
    WHERE 1=1 '
    || v_initial_date
    || v_nvendedor
    || v_nstatus
    || '
limit 30 ';
END;
$function$
;

O resultado que me retorna é esse:

resultado_function_postgres.png.35fbffad3bf45156820840b37dd711c7.png

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 1

Bom dia, você tem que executar com 'select * from funcao()'  e não com 'select funcao()'. Sua função retorna uma tabela, você pode selecionar somente os campos necessários e não todos os campos ( * ).

SELECT * from relacional.lista_pedido_site_status_data('Gold', NULL,NULL,NULL);

 

 

 

Edited by Ronivaldo Lopes
Link to comment
Share on other sites

  • 0
2 horas atrás, Ronivaldo Lopes disse:

Bom dia, você tem que executar com 'select * from funcao()'  e não com 'select funcao()'. Sua função retorna uma tabela, você pode selecionar somente os campos necessários e não todos os campos ( * ).

SELECT * from relacional.lista_pedido_site_status_data('Gold', NULL,NULL,NULL);

 

 

 

Boa tarde Ronivaldo !! Muito obrigado por me atentar a esse detalhe. Nossa passei despercebido. Valeu !!! 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...