Conversion de type char en type number dans sql loader
sabdoul
-
sabdoul Messages postés 47 Statut Membre -
sabdoul Messages postés 47 Statut Membre -
Bonsoir, j'ai une préoccupation depuis quelques 2 jours et ça commence a bien faire donc j'ai besoin de votre aide.
j'ai des données de type chaine de caractère dans le fichier plat et je les les convertir en
type number avant leurs insertion dans ma BDD oracle a travers sql loader car ils sont
déclarés avec le type number mais j'ai cette erreur
ORA-00604: une erreur s'est produite au niveau SQL récursif 1
ORA-01722: Nombre non valide
voici mon fichier de controle
LOAD DATA
APPEND
INTO TABLE ma table
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(CETABL char(5) ,
COPRODUIT char(35) ,
DESIG char(128),
QUANTITE QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99')"
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999')"
DATE Date "DD/MM/YYYY"
)
j'ai essayé en ajoutant les NLS_NUMERIC_CHARACTERS mais rien a faire.
voici comment se présente mes données
212;1101411;MAXIMOUSSE 24 NEW BLOH;120,00; 50 160;59 189;01/01/2013
212;1101411;MAXIMOUSSE 24 NEW BLOH;1 080,00;368 010;368 010;01/01/2013
212;1102101;BF4 BLOH X 36 MX;-2 520,00;-745 200;-879 336;01/01/2013
212;1102101;BF4 BLOH X 36 MX;2 520,00;686 980;686 980;01/01/2013
212;1102103;BF 8 580 GR X 24 MX;720,00;363 090;363 090;01/01/2013
je précise qu'il un separateur d'espace entre les milliers et c'est pour cela que j'utilise G pour l'indiquer.
j'espère que j'ai été plus précis et merci de vouloir m'aider
j'ai des données de type chaine de caractère dans le fichier plat et je les les convertir en
type number avant leurs insertion dans ma BDD oracle a travers sql loader car ils sont
déclarés avec le type number mais j'ai cette erreur
ORA-00604: une erreur s'est produite au niveau SQL récursif 1
ORA-01722: Nombre non valide
voici mon fichier de controle
LOAD DATA
APPEND
INTO TABLE ma table
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(CETABL char(5) ,
COPRODUIT char(35) ,
DESIG char(128),
QUANTITE QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99')"
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999')"
DATE Date "DD/MM/YYYY"
)
j'ai essayé en ajoutant les NLS_NUMERIC_CHARACTERS mais rien a faire.
voici comment se présente mes données
212;1101411;MAXIMOUSSE 24 NEW BLOH;120,00; 50 160;59 189;01/01/2013
212;1101411;MAXIMOUSSE 24 NEW BLOH;1 080,00;368 010;368 010;01/01/2013
212;1102101;BF4 BLOH X 36 MX;-2 520,00;-745 200;-879 336;01/01/2013
212;1102101;BF4 BLOH X 36 MX;2 520,00;686 980;686 980;01/01/2013
212;1102103;BF 8 580 GR X 24 MX;720,00;363 090;363 090;01/01/2013
je précise qu'il un separateur d'espace entre les milliers et c'est pour cela que j'utilise G pour l'indiquer.
j'espère que j'ai été plus précis et merci de vouloir m'aider
A voir également:
- Conversion de type char en type number dans sql loader
- Clear type - Guide
- Type de ram - Guide
- Comment changer le type de fichier - Guide
- Windows loader - Télécharger - Gestion de fichiers
- Chat type coco - Accueil - Réseaux sociaux
4 réponses
Salut,
Tu devrais essayer quelque chose comme :
SELECT TO_NUMBER('-2 520,00', '999G999D99',
'NLS_NUMERIC_CHARACTERS = '', ''') FROM DUAL;
cdlt
Tu devrais essayer quelque chose comme :
SELECT TO_NUMBER('-2 520,00', '999G999D99',
'NLS_NUMERIC_CHARACTERS = '', ''') FROM DUAL;
cdlt
bonjour, concernant cette solution je pense qu'elle s'effectue dans une requête. hors mon cas c'est l'insertion des données provenant du fichier dans ma BDD a travers sql loader. donc je sais pas s'il une syntaxe spécifique de conversion de chaine de caractère en nombre dans le fichier de contrôle. si oui comment se présente elle.
du genre
LOAD DATA
APPEND
INTO TABLE ma table
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(CETABL char(5) ,
COPRODUIT char(35) ,
DESIG char(128),
QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99')"
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999')",
DATE Date "DD/MM/YYYY"
)
qu'est ce qu'il faut adapter a ces lignes pour que ça marche car j'ai essayer plusiers syntaxe mais rien n'y faire ça ne marche pas
QUANTITE QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99')"
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999')"
merci d'avance
du genre
LOAD DATA
APPEND
INTO TABLE ma table
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(CETABL char(5) ,
COPRODUIT char(35) ,
DESIG char(128),
QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99')"
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999')",
DATE Date "DD/MM/YYYY"
)
qu'est ce qu'il faut adapter a ces lignes pour que ça marche car j'ai essayer plusiers syntaxe mais rien n'y faire ça ne marche pas
QUANTITE QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99')"
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999')"
merci d'avance
sur la logique du to_number du select ce devrait être :
attention aux simples cote ' et aux doubles cotes "
Un étranger, c'est un ami qu'on n'a pas encore rencontré.
"TO_NUMBER (:QUANTITE,'999G999D99','NLS_NUMERIC_CHARACTERS = '', ''')"
attention aux simples cote ' et aux doubles cotes "
Un étranger, c'est un ami qu'on n'a pas encore rencontré.
Bonjour, j'avais déjà essayer cela et je viens de l'essayer encore mais ça ne marche pas c'est toujours la même erreur
Enregistrement 1 : Rejeté - Erreur sur table ma table.
ORA-00604: une erreur s'est produite au niveau SQL récursif 1
ORA-01722: Nombre non valide
voici la syntaxe
QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99','NLS_NUMERIC_CHARACTERS = '', ''') ",
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999','NLS_NUMERIC_CHARACTERS = '', ''')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999','NLS_NUMERIC_CHARACTERS = '', ''')"
même en mettant des . a la place des , ou en les inter-changeant ça ne fonctionne pas.
Enregistrement 1 : Rejeté - Erreur sur table ma table.
ORA-00604: une erreur s'est produite au niveau SQL récursif 1
ORA-01722: Nombre non valide
voici la syntaxe
QUANTITE "TO_NUMBER(:QUANTITE,'999G999D99','NLS_NUMERIC_CHARACTERS = '', ''') ",
MONTANT_HT "TO_NUMBER(:MONTANT_HT,'999G999G999','NLS_NUMERIC_CHARACTERS = '', ''')",
MONTANT_TTC "TO_NUMBER(:MONTANT_TTC,'999G999G999','NLS_NUMERIC_CHARACTERS = '', ''')"
même en mettant des . a la place des , ou en les inter-changeant ça ne fonctionne pas.