Converter procedure Firebird em Function Postgresql

Bom dia colegas,

Estou efetuando uma conversão de um banco Firebird para um banco Postgresql, porém estou tendo dificuldades com a sintaxe do postgres.

Gostaria de saber se alguém pode me ajudar e transformar essa procedure e a partir dela eu converto todas as outras.

Segue:


SET TERM ^ ;

CREATE OR ALTER PROCEDURE TBLSDOCTB0_GETSALDO (
conta integer,
empresa integer,
mes integer,
ano integer)
returns (
saldo decimal(15,2))
as
declare variable sql varchar(400);
begin
sql = ‘SELECT SDOANT ‘;
if (:Mes >= 1) then begin
sql = sql || ’ + (D01 - C01)’;
end
if (:Mes >= 2) then begin
sql = sql || ’ + (D02 - C02)’;
end
if (:Mes >= 3) then begin
sql = sql || ’ + (D03 - C03)’;
end
if (:Mes >= 4) then begin
sql = sql || ’ + (D04 - C04)’;
end
if (:Mes >= 5) then begin
sql = sql || ’ + (D05 - C05)’;
end
if (:Mes >= 6) then begin
sql = sql || ’ + (D06 - C06)’;
end
if (:Mes >= 7) then begin
sql = sql || ’ + (D07 - C07)’;
end
if (:Mes >= 8) then begin
sql = sql || ’ + (D08 - C08)’;
end
if (:Mes >= 9) then begin
sql = sql || ’ + (D09 - C09)’;
end
if (:Mes >= 10) then begin
sql = sql || ’ + (D10 - C10)’;
end
if (:Mes >= 11) then begin
sql = sql || ’ + (D11 - C11)’;
end
if (:Mes >= 12) then begin
sql = sql || ’ + (D12 - C12)’;
end
sql = sql || ’ as saldo FROM tblsdoctb0 ';
sql = sql || ’ WHERE idconta = ’ || :Conta;
sql = sql || ’ and ano = ’ || :ano;
sql = sql || ’ and idempresa = ’ || :empresa;
execute statement :Sql into :Saldo;
if (:saldo is null) then begin
saldo = 0;
end
suspend;
end^

SET TERM ; ^


Atenciosamente,

RESOLVIDO

CREATE OR REPLACE FUNCTION contabil_saldo_getsaldo (integer, integer, integer)
returns
decimal(15,2) as $contabil_saldo_getsaldo$
declare
Conta alias for $1;
Mes alias for $2;
Ano alias for $3;
sql text;
Retorno decimal(15,2) default 0;
begin
sql = ‘SELECT saldoanterior ‘;
if ($2 >= 1) then
sql = sql || ’ + (D01 - C01)’;
end if;
if ($2 >= 2) then
sql = sql || ’ + (D02 - C02)’;
end if;
if ($2 >= 3) then
sql = sql || ’ + (D03 - C03)’;
end if;
if ($2 >= 4) then
sql = sql || ’ + (D04 - C04)’;
end if;
if ($2 >= 5) then
sql = sql || ’ + (D05 - C05)’;
end if;
if ($2 >= 6) then
sql = sql || ’ + (D06 - C06)’;
end if;
if ($2 >= 7) then
sql = sql || ’ + (D07 - C07)’;
end if;
if ($2 >= 8) then
sql = sql || ’ + (D08 - C08)’;
end if;
if ($2 >= 9) then
sql = sql || ’ + (D09 - C09)’;
end if;
if ($2 >= 10) then
sql = sql || ’ + (D10 - C10)’;
end if;
if ($2 >= 11) then
sql = sql || ’ + (D11 - C11)’;
end if;
if ($2 >= 12) then
sql = sql || ’ + (D12 - C12)’;
end if;
sql = sql || ’ as saldo FROM contabil_saldo’;
sql = sql || ’ WHERE idcontacontabil = ’ || $1;
sql = sql || ’ and ano = ’ || $3;

RAISE INFO ‘Comando SQL: %’, sql;

EXECUTE sql INTO Retorno;

if Retorno is null then
Retorno = 0;
end if;

return Retorno;
end;
$contabil_saldo_getsaldo$
LANGUAGE ‘plpgsql’ VOLATILE;