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