Ir para conteúdo
Fórum Script Brasil
  • 0

Function retornando resultado em formato JSON


ljsantos

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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);

 

 

 

Editado por Ronivaldo Lopes
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...