Problemas ao trafegar Number ou Date como caracter

22, Setembro 2008

Um problema muito comum ao trafegar Number ou Date como caracter refere-se à formatação dos valores. Toda conexão com o banco de dados Oracle cria algumas váriáveis de sessão, que podem variar de uma sessão para outra causando assim erros que podem parecer intermitentes, por exemplo, funciona no Desenvolvimento e não na Homologação ou funciona na máquina de um usuário e na de outro dá problema.
Para evitar esses transtornos, o ideal é forçar o valor a ser atribuído para o formato esperado.

Ex:

declare
   numero        number(10,2);
   numberoAux varchar2(6) := '1,00';
   data           date;
   dataAux      varchar2(12) := '10/01/2008';
begin
   -- Errado
   numero := numberoAux; -- Dependendo do formato de pontuação da sessão, poderá disparar uma exception
   -- Certo
   numero := to_number(numberoAux,'999g999g999g990d00','nls_numeric_characters='',.''');

   -- Errado
   data := dataAux; -- Dependendo do formato de data da sessão, poderá disparar uma exception
   -- Certo
   data := to_date(dataAux,'dd/mm/rrrr');
end;