Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

emerfx

Mudar modo de corte de valor numerico no Oracle

Recommended Posts

Senhores(as)

 

Preciso fazer com que o Oracle se comporte da seguinte forma:

 

- Para saber o motivo é uma migração Sybase para Oracle e tenho de manter as caracteristicas do Sybase:

 

Então no Sybase eu faço contas e insiro no campo... o campo é obrigatóriamente de duas casas decimais...

usando o SET ARITHABORT do Sybase é feito o Calculo e por exemplo no valor 234,256 o resultado para o campo fica 234,25, porem no ORACLE ele arredonda: 234,26... ok, um trunc resolve, mas são 2000 procedures e 855 triggers que utilizam calculos, assim eu preciso de uma solução similar a do Sybase, alter session, system, sei lá, to revirando documentações e a internet e não encontro a solução, fica aqui meu pedido insólito de ajuda!

 

Espero ter sido claro, por favor, postem apenas se encontrarem uma solução ampla que isso seja para afetar a todo o banco e resolver meu problema.

 

Obrigado e no aguardo.

 

Emerson DBA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Emerson :

 

Dei um pesquisa na documentação do Oracle e no site AskTom sobre isto e realmente não achei nada, acho que Oracle não tem esta opção.

 

Conseguiu alguma coisa ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

... mas são 2000 procedures e 855 triggers ...

Creio ser este o problema do Emerson.

Compartilhar este post


Link para o post
Compartilhar em outros sites

... mas são 2000 procedures e 855 triggers ...

Creio ser este o problema do Emerson.

 

 

É isso ai Motta, você sacou a idéia...e pior que isso, pois quando isso ocorrer dentro dos procedimentos e depois ali mesmo ocorrer mais calculos esse valor se altera em mais de uma unidade tão somente.

Por isso não adianta deixar apenas para o final da ação, pois ali o valor já pode ter sido afetado.

 

Agora tenho mais uma pergunta, como estou migrando um sistema que roda em sybase é comum eu tratar os formatos como similaridade, dentro do oracle ficou barbada, tipo int = number(10,0), snallint = number(5,0), tinyint = number(3,0) e bit=number(1,0)... o ",0)" é forçado para que o Delphi não generalize e torne ele um float, mas nos casos onde eu não possuo um valor, ou seja vem nulo "NULL" ele generaliza mesmo fazendo um cast em cima... cast(null as number(10,0)... triste, encontramos uma saida tabajara fazendo um cross join com uma tabela fisica para isso, mas é emjambrão... queria saber se alguem tem ideia de se há como contornar isso??? lembrem da precisão!!!

Abs.

 

Emerson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi nulo é nulo, pode ser nulo em type char,number etc.

 

O Oracle tem o Nvl(<campo>,<valor>) paara tratar o caso de nulo.

 

select nvl(campo1,'valor nulo') campo1,nvl(campo2,0) campo2 from tabela

 

é isto ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Emerfx,

 

Como está os datatypes númericos quando se realizou a migração? Neste caso, é mais fácil realizar um ALTER TABLE <tabela> MODIFY <coluna> para uma aredondamento mais preciso.

 

É melhor comparar o MER do SYSBASE e como está no Oracle, acertar isso no modelo acho que fica mais fácil.

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.