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

Converter Procedure SqlServer para postgresql


Glauber M. Silva

Pergunta

Eu quero converter o script abaixo para postgresql e minha dificuldade esta em retornar uma tabela com os dados já processados

--Retorna Saldo_inicial,Entrada,Siada e Saldo_final do Mês
declare @idEmpresa int;
set @idEmpresa= '1';
declare @dataInicial datetime, @dataFinal datetime;
set @dataInicial= convert(datetime, '01-11-2017', 103);
set @dataFinal= convert(datetime, '30-11-2017', 103);
set @dataFinal= dateadd(ms, -3, dateadd(day, +1, @dataFinal));
declare @inicioAno datetime;
set @inicioAno= dateadd(year, datediff(year, 0, @dataInicial), 0);
declare @saldoFinal numeric(12,2); 
set @saldoFinal= (SELECT sum(case when sit_flcx = 'Entrada' then +val_flcx else -val_flcx end) from tabflcx where emp_flcx = @idEmpresa and data_flcx >= @inicioAno and data_flcx < @dataInicial)
set @saldoFinal = coalesce(@saldoFinal, 0);
declare @MovPeriodo table (dataMov date primary key, sumEntrada numeric(12, 2), sumSaida numeric(12, 2));

INSERT into @MovPeriodo (dataMov, sumEntrada, sumSaida)SELECT cast(data_flcx as date), sum(case when sit_flcx = 'Entrada'
then val_flcx else 0 end), sum(case when sit_flcx = 'Saída' then val_flcx else 0 end) from tabflcx where emp_flcx = @idEmpresa and data_flcx between @dataInicial and @dataFinal group by cast(data_flcx as date);declare @totalEntrada numeric(12, 2), @totalSaida numeric(12, 2);SELECT @totalEntrada= sum(sumEntrada)
,@totalSaida= sum(sumSaida)from @MovPeriodo;set @totalEntrada= coalesce(@totalEntrada, 0);set @totalSaida= coalesce(@totalSaida, 0);with cteDatas as (SELECT cast(@dataInicial as date) as Data union all SELECT dateadd(day, 1, Data) from cteDatas where Data < cast(@dataFinal as date))SELECT [Mes]=
datename(month, D.Data),[Data]= convert(char(10), D.Data, 103), [Saldo_inicial]= @saldoFinal + IsNull((SELECT sum(Mx.sumEntrada - Mx.sumSaida) from @MovPeriodo as Mx where Mx.dataMov < D.Data), 0),[Entrada]= coalesce(M.sumEntrada, 0),[Saida]= coalesce(M.sumSaida, 0), [Saldo_final]= @saldoFinal +
IsNull((SELECT sum(Mz.sumEntrada - Mz.sumSaida) from @MovPeriodo as Mz where Mz.dataMov <= D.Data),0) from cteDatas as D left join @MovPeriodo as M on M.dataMov = D.Data union all SELECT  NULL, NULL, NULL, @totalEntrada, @totalSaida, NULL

Eu dividi por etapas e cheguei até agora a este resultado (não satisfatório pois empaquei no retornar a tabela MovPeriodo):
 

CREATE OR REPLACE FUNCTION SALDO_GERAL() RETURNS 
TABLE
(
	MES text,
	DATA timestamp,
	SALDO_INICIAL decimal,
	ENTRADA decimal,
	SAIDA decimal,
	SALDO_FINAL decimal
)
as $$

--Retorna Saldo_inicial,Entrada,Siada e Saldo_final do Mês
/*declare */
idEmpresa int:= '1';
dataInicial timestamp	:= to_date('01-11-2017','dd/mm/YYYY');
dataFinal timestamp	:= to_date('30-11-2017','dd/mm/YYYY')-Interval '3 ms'+Interval '1 day';
inicioAno timestamp 	:= to_date('01/01/2017','dd/mm/YYYY');
saldoFinal numeric(12,2):= coalesce((SELECT sum(case when sit_flcx = 'Entrada' then +val_flcx else -val_flcx end) from tabflcx where emp_flcx = idEmpresa and data_flcx >= inicioAno and data_flcx < dataInicial),0);
MovPeriodo record ;
totalEntrada numeric(12, 2);
totalSaida numeric(12, 2);

/*BEGIN*/
SELECT cast(data_flcx as date), 
	sum(case when sit_flcx = 'Entrada'
	then val_flcx else 0 end), 
	sum(case when sit_flcx = 'Saída' 
	then val_flcx else 0 end) 
	/*INTO MovPeriodo*/
from 
	tabflcx 
where 
	emp_flcx = idEmpresa and 
	data_flcx between dataInicial and dataFinal 
group by 
cast(data_flcx as date);

/*END*/
$$ LANGUAGE sql;

SELECT SALDO_GERAL() AS RETORNO;

 

RESULTADO.png

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...