emerfx 0 Denunciar post Postado Abril 28, 2010 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
Motta 645 Denunciar post Postado Maio 1, 2010 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
caduribeiro13 0 Denunciar post Postado Maio 5, 2010 É apenas uma campo que precisa ser arredondado? Se fizer uma trigger para arredondar (ou truncar) o valor antes de inserido? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 5, 2010 ... 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
emerfx 0 Denunciar post Postado Maio 21, 2010 ... 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
Motta 645 Denunciar post Postado Maio 21, 2010 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
alphamek 2 Denunciar post Postado Junho 4, 2010 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