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.
J'obtiens cette erreur :
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'ai pris la syntaxe de NLS_NUMBER_CHARACTERS dans ce message.ORA-12702: la chaîne de paramètre NLS n'est pas valide dans la fonction SQL
Auparavant, d'après la doc d'Oracle, j'avais essayé ceci :
Et là j'obtenais ce message :
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'
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 :
J'obtiens : 6000
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT TO_NUMBER('6 000,00', '9G999D99') FROM DUAL
Sachant que le montant de la no_piece est justement 6 000,00, si je fais cette requête :
J'obtiens :
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'
ORA-01722: Nombre non valide
01722. 00000 - "invalid number"
*Cause:
*Action:![]()
![]()
![]()
Partager