|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||||
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
Bonjour,
je souhaiterais effectuer le chargement d'une base de données à une autre en utilisant des fichiers plats. J'ai réussi à charger presk l'ensemble de mes tables avec SQLLDR mais une me résiste ... mon fichier plat est de la forme : Code :
Code :
Code :
Code :
Record 13: Rejected - Error on table MA_TABLE, column TYPE_MES. ORA-01401: inserted value too large for column Config: Oracle 9.2 je ne sais vraiment plus dans quelle direction chercher. Un coup de main serait vivement apprécié merci d'avance à ceux qui se pencheront sur le probleme Magic Charly |
||||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Donnez nous tous les éléments pour analyser l'erreur:
- la ligne 13 du fichier ma_table.csv - le contenu des fichiers suivants: log_MM.txt bad_MM.txt discard_MM.txt |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
pas de problèmes
ligne 13 "53292","05/04/2006 00:15:00","1","M","Q" ligne 14 "53293","05/04/2006 00:15:00","-1","M","Q" dans le fichier discard il n'y a rien dans le fichier bad file (1 seule ligne ) "53293","05/04/2006 00:15:00","-1","M","Q" j'ai l'impression qu'il interprete mal le -1 j'ai essayé de forcer le type en FLOAT dans le fichier de controle pour le champ VALEUR. ça ne change rien merci pour votre aide |
|
|
00
|
|
|
#4 | ||||
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
j'ai modifié mon fichier de controle comme suit :
Code :
Code :
13 "53292","05/04/2006 00:15:00","1","M","Q" 14 "53293","05/04/2006 00:15:00","-1","M","Q" 103 "51489","05/04/2006 00:15:00","1","M","Q" 104 "51558","05/04/2006 00:15:00","1","M","Q" merci |
||||
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : janvier 2006 Messages : 71 ![]() |
Encore une qualite d'Oracle : les codes d'erreurs retournés.
Essaie voir de taper ORA-01401 dans google, il y a de fortes chances que tu y trouves ta solution. |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
c'est ce que je fais mais je ne trouve pas de réponse satisfaisant à mon probleme
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : juin 2004 Messages : 487 ![]() |
Bonjour,
Type_mes est un varchar2(1). Il ne peux donc prendre -1. Il faux que tu le change en varchar2(2). |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
merci pour cette info
cependant.. TYPE_MES doit recevoir des valeurs comme "M" ou "Q" c'est le champ valeur qui est un FLOAT qui reçoit "1" "-1" "0,422" pensez vous que le fait que je sépare mes champs (fields) par des virgules plutot que des points virgule pourrait créer une confusion? le champ float peut il recevoir la valeur -1 (ça semblerait logique mais bon..) ? merci de votre attention |
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : juin 2004 Messages : 487 ![]() |
peux tu nous envoyer ton fichier bad complet?
|
|
|
00
|
|
|
#10 | ||
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
en remplaçant optionally enclosed by '"' par
enclosed by '"' j'ai réussi a supprimer les erreurs que j'avais lorsque le champ Valeur prenait une valeur négative par contre les décimaux sont mal interprétées comme en témoigne le fichier bad ci dessous : j'ai limité le nombre d'erreurs a 50 (errors=50 dans la commande sqlldr) Code :
|
||
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 448 ![]() |
Pourquoi tu déclares pas un NUMBER à la place d'un FLOAT ?
Y'a peut-être une erreur sur la virgule de séparation des décimales |
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
c'est ce que je pense (pour la virgule) ...
le type NUMBER n'est pa reconnu par SQL LOADER je ne vois pas comment corriger uniquement les , qui ne sont pas au niveau du nombre float. ça me permettrait de séparer les champs par des ; par exemple tout en conservant la virgule qui est correctement interprétée par oracle. <mon fichier fait 3000000 de lignes à la main ça serait pesant> ![]() ex: "55388";"06/04/2006 12:00:00";"1,566";"M";"Q" |
|
|
00
|
|
|
#13 |
|
Membre éclairé
![]() Inscription : juin 2004 Messages : 487 ![]() |
Et bien on a la réponse!
Tu ne peux pas séparer tes champs par des virgules et t'en servir en même temps comme séparateur. deux solutions: 1: Tu changes ton fichier en mettant des ; comme tu le suggérais (ou un . à la place de la virgule décimale). 2: Tu loade toutes tes données dans une table intermédiaire. Et tu prends deux colonnes pour ta colonne VALEUR. ensuite tu pourras facilement tout reconstruire dans ta table |
|
|
00
|
|
|
#14 |
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
je relance ma requete pour fabriquer le fichier TSV adapté (ce qui risque de prendre un peu de temps)
et j'essaie ça merci ! |
|
|
00
|
|
|
#15 | ||||||
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
j'ai essayé
en ayant un fichier du type : "55388";"06/04/2006 12:00:00";"1,566";"M";"Q" et en adaptant mon fichier de controle Code :
il refuse toujours les décimaux & les entiers relatifs d'autre part les insertions réalisées ne correspondent pas à la réalité: attendu : Code :
Code :
Rejected - Error on table MA_TABLE, column TYPE_MES. Initial enclosure character not found |
||||||
|
|
00
|
|
|
#16 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Essayez d'utiliser pour la colonne qui est FLOAT plutôt le type NUMBER(x,y) avec x = nombre maximal de chiffres avant la virgule et y = nombre maximal de chiffres après la virgule.
|
|
|
00
|
|
|
#17 | ||
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
je ne comprends pas ce que tu m'as indiqué ne semble pas reconnu par sqlldr a moins que je ne l'ai pas utilisé correctement (voir ci dessous)
Code :
je n'ai plus de pistes... merci à vous tous |
||
|
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
En fait je voulais dire changer le type de la colonne dans la table et non changer dans le fichier de contrôle. De plus, sauf pour les données qui ont un format spécial (comme les dates), je conseille plutôt de ne mettre aucune indication de type dans le fichier de contrôle: sqlldr doit pouvoir se débrouiller tout seul en consultant la définition de la table et en faisant les conversions nécessaires.
|
|
|
00
|
|
|
#19 | ||||
|
Nouveau Membre du Club
![]() Inscription : février 2006 Messages : 167 ![]() |
j'ai passé la colonne de la table en NUMBER(8,12)
et je n'ai pas précisé de type dans le fichier de controle de SQLLDR pour cette colonne. voici le contenu de mon fichier bad (aucune ligne n'a été acceptée) Code :
Code :
|
||||
|
|
00
|
|
|
#20 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
Cela signifie 8 chiffres dont 12 décimales => ce n'est pas possible Passe-là en number sans spécification pour voir.
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com