Erro com variáveis na trigger firebird...

27/07/2021

6

Bom dia pessoal!!

Desde já agradeço a atenção de cada um em tentar ajudar a solucionar o meu problema..

Tenho que fazer uma importação de uma planilha de excel, porém, no momento da importação preciso fazer alguns cálculos para alimentar 3 colunas da minha tabela. O que eu fiz foi criar uma trigger que antes de inserir pegasse os valores que eu preciso para fazer os cálculos e jogasse em uma variável determinada para que eu pudesse faze-los. A compilação da trigger esta tudo ok, porém, quando eu tento fazer a inserção tenho o seguinte erro:


Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Integer overflow. The result of an integer operation caused the most significant bit of the result to carry.
At trigger 'CPT001_BI0'.


segue o código da minha trigger para uma avaliação de vcs... obrigado!!

AS
  declare vlrcotacao decimal(15,8);
  declare vlrcotacaodesp decimal(15,8);
  -- declare vmoeda char(20);
begin
  vlrcotacaodesp = (select c01_valor from cot001 where c01_data = new.c01_data and c01_moeda = new.c01_moedatx);

  new.c01_moedapar = substring(new.c01_market from character_length(new.c01_market)-2 for character_length(new.c01_market));
  vlrcotacao = (select c01_valor from cot001 where c01_data = new.c01_data and c01_moeda = new.c01_moedapar);

  new.c01_despesa = new.c01_taxa * vlrcotacaodesp;
  new.c01_totalrs = new.c01_total * vlrcotacao; (erro nessa linha)
  new.c01_unitario = new.c01_totalrs / new.c01_qtdade;
end


obs..: no debug da trigger, os valores estão sendo atribuídos corretamente, tentei usar o cast para formatar e não adiantou, o erro esta na linha marcada..
Junior
Responder

Posts

o erro apresentado que é houve estouro da capacidade de conteúdo do tipo inteiro.
outra coisa: use RIGHT() para pegar os caracteres à direita, LEFT() à esquerda
AS
  declare vlrcotacao decimal(15,8);
  declare vlrcotacaodesp decimal(15,8);
  -- declare vmoeda char(20);
begin
  vlrcotacaodesp = (select c.c01_valor from cot001 c where c.c01_data = new.c01_data and c.c01_moeda = new.c01_moedatx);

  new.c01_moedapar = right(new.c01_market,2);

  vlrcotacao = (select c.c01_valor from c.cot001 where c.c01_data = new.c01_data and c.c01_moeda = new.c01_moedapar);

  new.c01_despesa = (new.c01_taxa * vlrcotacaodesp);
  new.c01_totalrs = (new.c01_total * vlrcotacao); -- (erro nessa linha) provavelmente o resultado da multiplicação
                                                  -- é maior do que a capacidade do campo new.c01_totalrs ou o campo é inteiro e o resultado é float
                                                  -- campos inteiros comportam valores de -2.147.483.648 até 2.147.483.647
  new.c01_unitario = (new.c01_totalrs / new.c01_qtdade);
end
Responder
o erro apresentado que é houve estouro da capacidade de conteúdo do tipo inteiro.
outra coisa: use RIGHT() para pegar os caracteres à direita, LEFT() à esquerda
AS
  declare vlrcotacao decimal(15,8);
  declare vlrcotacaodesp decimal(15,8);
  -- declare vmoeda char(20);
begin
  vlrcotacaodesp = (select c.c01_valor from cot001 c where c.c01_data = new.c01_data and c.c01_moeda = new.c01_moedatx);

  new.c01_moedapar = right(new.c01_market,2);

  vlrcotacao = (select c.c01_valor from c.cot001 where c.c01_data = new.c01_data and c.c01_moeda = new.c01_moedapar);

  new.c01_despesa = (new.c01_taxa * vlrcotacaodesp);
  new.c01_totalrs = (new.c01_total * vlrcotacao); -- (erro nessa linha) provavelmente o resultado da multiplicação
                                                  -- é maior do que a capacidade do campo new.c01_totalrs ou o campo é inteiro e o resultado é float
                                                  -- campos inteiros comportam valores de -2.147.483.648 até 2.147.483.647
  new.c01_unitario = (new.c01_totalrs / new.c01_qtdade);
end


Emerson, eu acho que descobri, essa inserção na tabela eu estou importando de uma planilha do excel, o que acontece é que o meu valor é 0.002134 e esta pegando somente o 2134, aí esta estourando, você saberia o que posso fazer com relação a isso??

desde já obrigado pela atenção.
Responder

tem que saber como você está fazendo a leitura dos dados da planilha
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar