Le seul moyen est de définir la valeur appropriée pour nls_numeric_characters
paramétrez l'ensemble de la session et utilisez to_number()
fonction sans spécifier de masque de format.
Voici un exemple simple. Le caractère séparateur décimal est une virgule ","
et les littéraux numériques contiennent le point "."
comme caractère séparateur décimal :
SQL> show parameter nls_numeric_characters;
NAME TYPE VALUE
------------------------------------ ----------- ------
nls_numeric_characters string ,.
SQL> with t1(col) as(
2 select '12345.567' from dual union all
3 select '12.45' from dual
4 )
5 select to_number(col) as res
6 from t1;
select to_number(col)
*
ERROR at line 5:
ORA-01722: invalid number
SQL> alter session set nls_numeric_characters='.,';
Session altered.
SQL> with t1(col) as(
2 select '12345.567' from dual union all
3 select '12.45' from dual
4 )
5 select to_number(col) as res
6 from t1;
res
--------------
12345.567
12.45