Bonjour,

Nous devons importer des données d'un fichier CSV vers une table Oracle puis exécuter une procédure qui va utiliser cette table.

Dans le fichier CSV, des montants sont formatés de cette façon : "11*800,73".
Les colonnes de montants sont importés dans des colonnes VARCHAR2 dans la table.

Malheureusement, dans la procédure, le montant est affecté à une variable de type NUMBER. Je dois donc ajouter une conversion de VARCHAR2 en NUMBER(12, 2) dans la procédure pour qu'elle puisse fonctionner.

Je n'arrive pas a exprimer correctement le format à donner à la fonction TO_NUMBER, en travaillant sur un seul montant pour test.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT TO_NUMBER(rar_mht_in, '9G999D99', 'NLS_NUMERIC_CHARACTERS= ,') AS rar_mht_in
FROM envt.rar_cocw
WHERE no_piece = '546'
J'obtiens cette erreur :
ORA-12702: la chaîne de paramètre NLS n'est pas valide dans la fonction SQL
J'ai pris la syntaxe de NLS_NUMBER_CHARACTERS dans ce message.

Auparavant, d'après la doc d'Oracle, j'avais essayé ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT TO_NUMBER(rar_mht_in, '9G999D99', NLS_NUMERIC_CHARACTERS ' ,') AS rar_mht_in
FROM envt.rar_cocw
WHERE no_piece = '546'
Et là j'obtenais ce message :
ORA-00907: parenthèse de droite absente


Les montants du fichier CSV vont de l'entier simple "400" à "160 006,08".

EDIT
Si je fais cette requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT TO_NUMBER('6 000,00', '9G999D99')
FROM DUAL
J'obtiens : 6000

Sachant que le montant de la no_piece est justement 6 000,00, si je fais cette requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT TO_NUMBER(rar_mht_in, '9G999D99') AS rar_mht_in
FROM envt.rar_cocw
WHERE no_piece = '546'
J'obtiens :
ORA-01722: Nombre non valide
01722. 00000 - "invalid number"
*Cause:
*Action: