Problema com gravação de números decimais

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
xandesantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 12 Jun 2007 9:10 am
Localização: Salvador-BA

Prezados,

Ao tentar gravar um determinado valor (ex: 2,5986) o banco está aproximando o valor para 2,60. Imagino que tenha algo a ver com a propriedade DATA_PRECISION do campo que estou tentando inserir o valor citado. Entretanto, esta propriedade está com o valor 4. Não deveria gravar o valor como 2,5986? Caso contrário, como faço para aumentar este valor?

Agradeço antecipadamente qualquer ajuda.
Avatar do usuário
jessica.ff
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Seg, 11 Jun 2007 2:28 pm
Localização: Gravataí - RS
ninguém é tão sabio que não tenha a aprender, e nem tão ignorante que não tenha a ensinar.

Oi

Qual é o tipo desse seu campo?
Defina o número de casas decimais no próprio tipo do campo
Ex:
Campo Tipo
valor_multa NUMBER(8,2)
*** Esse numero dois é que me definira a quantidade de casas depois da virgula. :wink:
Bom pelo menos é assim que trabalho não sei se está 100% certo.
Espero ter ajudado
xandesantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 12 Jun 2007 9:10 am
Localização: Salvador-BA

Oi Jéssica,

Obrigado pela sua ajuda.

O campo é numérico e foi definido, na sua criação como number (4,2).
Tentei fazer o seguinte:

Selecionar tudo

ALTER TABLE ESPELHO_CONTRATO_PR
MODIFY ESCP_TX_JUROS_DESAGIO NUMBER(4,4) NULL;
e aí aparece a mensagem de erro:

Selecionar tudo

ORA-01440: column to be modified must be empty to decrease precision or scale
Alguma sugestão?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, bom dia. beleza?

Seguinte, está dando erro pois você está dando um MODIFY num campo que não está nulo.

Para testes, crie uma outra tabela e tente executar a precisão que deseja.
xandesantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 12 Jun 2007 9:10 am
Localização: Salvador-BA

Oi Trevisolli, bom dia.

Acho que descobri qual o problema. Como a tabela já tinha alguns registros inseridos (alguns deles com o campo ESCP_TX_JUROS_DESAGIO preenchido) e no Srcipt tinha um NULL no final, o Oracle acusava o erro.

Rodei o comando abaixo (alterando a precisão para 6,4 e sem o Null no final) e funcionou.

Selecionar tudo

ALTER TABLE ESPELHO_CONTRATO_PR
MODIFY ESCP_TX_JUROS_DESAGIO NUMBER(6,4);
 
COMMIT;
Muito obrigado pela ajuda de vocês.

Abraços.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Que bom brother,

Verdade, o NULL estava dando erro mesmo ...
Outra coisa, só como dica, quando se executa um DDL ( como o Alter Table ), ele já tem um Commit implícito.

Precisando, manda ai.
xandesantos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 12 Jun 2007 9:10 am
Localização: Salvador-BA

Ok. Bom saber desta dica do Commit implícito.

Mais uma vez, valeu pela ajuda.


Té +.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes