Converter procedure Firebird em Function Postgresql

1 resposta Resolvido
postgresqlfirebasesql
D

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,

1 Resposta

D
Solucao aceita

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;
Criado 10 de agosto de 2017
Ultima resposta 14 de ago. de 2017
Respostas 1
Participantes 1