SQL> select TO_NUMBER(123.56,'999.9') from dual;
select TO_NUMBER(123.56,'999.9') from dual
*
ERROR at line 1:
ORA-01722: invalid number
SQL> select TO_CHAR(123.56,'999.9') from dual;
TO_CHA
------
123.6
SQL>
Estou tendo dificuldade em entender as nuances do Oracle SQL. Por exemplo, dê uma olhada nas duas consultas acima.
Por que a primeira consulta falha, mas a segunda é bem-sucedida?
De acordo com a documentação , o primeiro valor para um to_number precisa ser
Portanto, o Oracle está convertendo implicitamente 123,56 em um valor de caractere. O problema é que o formato do to_number não corresponde ao valor fornecido. Isso pode ser visto porque você obtém o mesmo erro para as duas variações a seguir:
Mas você não para isso:
Ao converter caracteres em números, a especificação do formato deve corresponder exatamente, mas ao converter números em caracteres, o número pode ser extraído seletivamente usando o especificador de formato.