Criando a versão FloatToStr em PL/Sql no Firebird 2.5 – Show Delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Criando a versão FloatToStr em PL/Sql no Firebird 2.5

 

Ao tentar criar uma trigger de LOG no Firebird 2.5, percebi que quando usava valores de campos numeric ou double precision, na string desse log, o valor ficava com as casas decimais representativas, como por exemplo, ao usar num campo de Quantidade:

0,5 ficava 0.500

1000 ficava 1000.00

1 ficava 1000

então para resolver criei essa função.

 

CREATE OR ALTER PROCEDURE FLOAT_TO_STR (
IFLOAT DOUBLE PRECISION)
RETURNS (
RETORNO VARCHAR(30))
AS
DECLARE VARIABLE VRET VARCHAR(30);
DECLARE VARIABLE VDEC CHAR(1) = ‘,’;
BEGIN
VRET = TRIM(LEADING FROM CAST(:IFLOAT AS VARCHAR(30)));
VRET = REPLACE(:VRET, ‘.’, :VDEC);
WHILE (RIGHT(:VRET, 1) = ‘0’) DO
VRET = LEFT(:VRET, CHAR_LENGTH(:VRET) -1);
IF (RIGHT(:VRET, 1) = :VDEC) THEN
VRET = LEFT(:VRET, CHAR_LENGTH(:VRET) -1);
RETORNO = :VRET;
  SUSPEND;
END

 

Para usar chame assim:

select retorno from FLOAT_TO_STR(1000.00) from rdb$databse;

O retorno será uma string no formato ‘1000’

select retorno from FLOAT_TO_STR((select quantidade from estoque where codigo = 10)) from rdb$databse;

O retorno será uma string no formato ‘1’ e não mais ‘1.000’

Facebook Comments

Posts Relacionados

  • Ivan Cesar
  • 198 views
  • 0 comentários
  • 14 de julho de 2016

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Ir ao topo

© 2016 Infus Soluções em Tecnologia - Todos os Direitos Reservados