Ne vous est-il jamais arrivé de vouloir convertir une chaîne de caractères en nombre, et que cette conversion ne se fasse pas comme vous le souhaitiez ?
Un exemple :
Une conversion to_number('1234,56'

[avec virgule dans la chaîne] risque de se comporter différemment d'une conversion to_number('1234.56'

[avec un point].
D'ailleurs, dans un des deux cas, vous aurez probablement une erreur "ORA-01722: invalid number".
Tout dépend de la configuration du client Oracle de la machine sur laquelle la requête est lancée.
Pour éviter de dépendre de cette configuration sans pour autant la changer, il est possible de forcer certains paramètres simplement le temps de la conversion.
Ainsi :
| Code : |
select
to_number('1234,56', '99999999D999999', 'nls_numeric_characters='', ''')
from dual
|
[avec une virgule]
aura le même comportement que :
| Code : |
select
to_number('1234.56', '99999999D999999', 'nls_numeric_characters=''. ''')
from dual
|
[avec un point]
Pour détailler...
1er paramètre : le nombre entre cotes
2ème paramètre : le format avec la lettre 'D' pour prévoir l'emplacement de la décimal (prévoyez suffisamment de chiffres avant et après la décimal 'D', sinon erreur ORA-01722)
3ème paramètre : la définition du séparateur décimal et du séparateur de milliers.
Pour ce dernier paramètre, le premier caractère correspond au séparateur décimal, le deuxième caractère au séparateur de milliers. Les 2 caractères sont obligatoires. Si vous n'avez pas de séparateur de milliers, laissez le à -espace- (comme dans l'exemple).
Le paramètre nls_numeric_characters étant entre cotes, les valeurs de ce paramètre sont donc entre double-cotes !
En espérant que cela vous sera utile

Josserand BRINON