como faço para converter essa procedure de firebird para postgress
create or alter procedure CAIXA (
INICIO date,
FIM date)
returns (
COD VARCHAR(6),
DATA date,
HISTORICO varchar(60),
VALOR numeric(9,2),
TIPO char(1))
as
declare variable SALDO_ANT_CREDITO numeric(9,2);
declare variable SALDO_ANT_DEBITO numeric(9,2);
declare variable SALDO_FINAL numeric(9,2);
begin
/* Primeiro recuperamos a soma dos valores dos debitos anteriores ao
periodo informado para posteriormente calcularmos nosso saldo inicial */
select sum(ap.valor)
from apagar ap
where (ap.data < :inicio)
into :saldo_ant_debito;
/* Agora recuperamos a soma dos valores dos creditos anteriores ao
periodo informado */
select sum(ar.valor_rec)
from areceber ar
where (ar.data_rec < :inicio)
into :saldo_ant_credito;
/* Caso não haja lancamentos anteriores, a variavel ficara no estado NULL,
como no SQL qualquer operação matemática feita com valores NULL sempre
resulta em NULL, temos que verificar isso e atribuir 0.00 na variavel nula
para que forneça o resultado esperado */
if (:saldo_ant_credito is null) then saldo_ant_credito = 0.00;
if (:saldo_ant_debito is null) then saldo_ant_debito = 0.00;
data = :inicio - 1;
historico = 'SALDO ANTERIOR';
valor = (saldo_ant_credito - saldo_ant_debito);
/* Inicializando a variavel que armazenara o saldo final
com o valor do saldo anterior */
saldo_final = valor;
/* Por questões "estéticas" não queremos ter valores negativos no campo valor,
sendo assim, se o saldo anterior é negativo, devemos informar que o lançamento é
de débito e tornar o valor do saldo positivo, caso contratio informamos que o
lançamento é de crédito.*/
if (:valor < 0) then
begin
tipo = 'D';
valor = valor * -1;
end
else
begin
tipo = 'C';
end
suspend; /* Retornando a primeira linha (registro) com o saldo anterior */
/* o comando a seguir seleciona os registros dentro do periodo informado
buscando na tabela de contas a pagar */
tipo = 'D'; /* Estamos recuperando débitos */
for select g.cod, ap.data, ap.historico, ap.valor
from apagar ap
join grupos g on ap.iddespesa=g.id
where (ap.data between :inicio and :fim)
into :cod,:data, :historico, :valor
do
begin
/* Subtraimos o valor do lançamento do saldo final */
saldo_final = saldo_final - valor;
/* O suspend a seguir retorna uma "linha" contendo os campos
data, historico, tipo e valor que tem seus valores armazenados
nas variáveis de mesmo nome */
suspend;
end
tipo = 'C'; /* Estamos recuperando créditos */
/* seleciona os registros dentro do periodo informado
buscando na tabela de contas a receber */
for select g.cod, ar.data_rec, ar.historico_rec, ar.valor_rec
from areceber ar
join grupos g on ar.idreceita=g.id
where (ar.data_rec between :inicio and :fim)
into :cod, :data, :historico, :valor
do
begin
/* Adicionamos o valor do lançamento ao saldo final */
saldo_final = saldo_final + valor;
/* O suspend a seguir retorna uma "linha" contendo os campos
data, historico, tipo e valor que tem seus valores armazenados
nas variáveis de mesmo nome */
suspend;
end
/* Montamos o ultimo "registro" que conterá os valores do saldo FINAL */
data = :fim;
historico = 'SALDO FINAL';
tipo = 'C';
valor = saldo_final;
suspend;
end
;
INICIO date,
FIM date)
returns (
COD VARCHAR(6),
DATA date,
HISTORICO varchar(60),
VALOR numeric(9,2),
TIPO char(1))
as
declare variable SALDO_ANT_CREDITO numeric(9,2);
declare variable SALDO_ANT_DEBITO numeric(9,2);
declare variable SALDO_FINAL numeric(9,2);
begin
/* Primeiro recuperamos a soma dos valores dos debitos anteriores ao
periodo informado para posteriormente calcularmos nosso saldo inicial */
select sum(ap.valor)
from apagar ap
where (ap.data < :inicio)
into :saldo_ant_debito;
/* Agora recuperamos a soma dos valores dos creditos anteriores ao
periodo informado */
select sum(ar.valor_rec)
from areceber ar
where (ar.data_rec < :inicio)
into :saldo_ant_credito;
/* Caso não haja lancamentos anteriores, a variavel ficara no estado NULL,
como no SQL qualquer operação matemática feita com valores NULL sempre
resulta em NULL, temos que verificar isso e atribuir 0.00 na variavel nula
para que forneça o resultado esperado */
if (:saldo_ant_credito is null) then saldo_ant_credito = 0.00;
if (:saldo_ant_debito is null) then saldo_ant_debito = 0.00;
data = :inicio - 1;
historico = 'SALDO ANTERIOR';
valor = (saldo_ant_credito - saldo_ant_debito);
/* Inicializando a variavel que armazenara o saldo final
com o valor do saldo anterior */
saldo_final = valor;
/* Por questões "estéticas" não queremos ter valores negativos no campo valor,
sendo assim, se o saldo anterior é negativo, devemos informar que o lançamento é
de débito e tornar o valor do saldo positivo, caso contratio informamos que o
lançamento é de crédito.*/
if (:valor < 0) then
begin
tipo = 'D';
valor = valor * -1;
end
else
begin
tipo = 'C';
end
suspend; /* Retornando a primeira linha (registro) com o saldo anterior */
/* o comando a seguir seleciona os registros dentro do periodo informado
buscando na tabela de contas a pagar */
tipo = 'D'; /* Estamos recuperando débitos */
for select g.cod, ap.data, ap.historico, ap.valor
from apagar ap
join grupos g on ap.iddespesa=g.id
where (ap.data between :inicio and :fim)
into :cod,:data, :historico, :valor
do
begin
/* Subtraimos o valor do lançamento do saldo final */
saldo_final = saldo_final - valor;
/* O suspend a seguir retorna uma "linha" contendo os campos
data, historico, tipo e valor que tem seus valores armazenados
nas variáveis de mesmo nome */
suspend;
end
tipo = 'C'; /* Estamos recuperando créditos */
/* seleciona os registros dentro do periodo informado
buscando na tabela de contas a receber */
for select g.cod, ar.data_rec, ar.historico_rec, ar.valor_rec
from areceber ar
join grupos g on ar.idreceita=g.id
where (ar.data_rec between :inicio and :fim)
into :cod, :data, :historico, :valor
do
begin
/* Adicionamos o valor do lançamento ao saldo final */
saldo_final = saldo_final + valor;
/* O suspend a seguir retorna uma "linha" contendo os campos
data, historico, tipo e valor que tem seus valores armazenados
nas variáveis de mesmo nome */
suspend;
end
/* Montamos o ultimo "registro" que conterá os valores do saldo FINAL */
data = :fim;
historico = 'SALDO FINAL';
tipo = 'C';
valor = saldo_final;
suspend;
end
;
Antonio Santos
Curtidas 0