|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Franck FlayelleConsultant CRM Inscription : mai 2004 Messages : 58 ![]() |
Bonjour à tous,
je cherche à importer les données d'un fichier dans une base de données Oracle 9 via SQL Loader, et l'une des donnnées de ce fichier doit se retrouver dans 2 colonne distinctes : X_ATL_EXT_ID et PARTY_UID. Pour info, en base X_ATL_EXT_ID est un varchar(15) et PARTY_UID un varchar(100) dans mon ctl, j'ai donc fait mon ctl comme suit : Code :
Record 2: Rejected - Error on table "EIM_ACCOUNT", column PARTY_UID. Field in data file exceeds maximum length apres quelques essais, un collègue me conseille de mettre CHAR(4000) dans la ligne grace à laquelle je fais ma copie (ce qui me donne la ligne suivante : PARTY_UID char(4000) ":X_ATL_EXT_ID") car il avait deja eu le problème et que cela l'avait resolu, sans qu'il sache pourquoi. comme ca me semblait bizarre de mettre un champ de 4000 caracteres dans une colonne de 100 caracteres, j'ai fait quelques tests avec char(15) (taille du premier champ), char(100) (taille du second) et finalement VARCHAR à la place du char(4000). les 2 premiers tests n'ont pas fonctionné mais le dernier oui. donc voila : je n'ai pas vraiment de problème car mon import fonctionne maintenant, mais je ne suis pas certain de comprendre pourquoi et je ne trouve pas d'explication sur le net. Je comprend d'autant moins cette correction que mon import fonctionnait tres bien en environnement de devellopement sans. je suppose que SQL Loader a besoin qu'on lui donne une element de comparaison pour savoir le type de donnée qu'il va traiter : dans le cas ou une donnée existe à la place correspondante dans le fichier de données il considère qu'il a affaire à une chaien de caractère et sinon il faut lui donner un type, le type de la colonne qui va etre chargé ne lui suffit pas. si quelqu'un pouvait me confirmer ou m'infirmer cela, et eventuellement me donner plus d'explications ca serait vraiment sympa, j'aime pas trop utiliser quelque chose sans savoir pourquoi ca marche. et aussi, est-ce vraiment obligatoire d'ajouter un type, et si non comment puis je faire pour ne plus avoir mon erreur ? merci d'avance |
||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() |
Bonjour,
Je viens de jeter un oeil à la doc d'Oracle concernant SQL Loader et apparement tous les exemples font apparaitre le datatype. http://www.csee.umbc.edu/help/oracle...67792/ch05.htm De memoire, j'ai explicité le datatype lors de mes imports. Quelle erreur as-tu dans ton "bad file" ? |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Franck FlayelleConsultant CRM Inscription : mai 2004 Messages : 58 ![]() |
Salut,
d'abord merci pour ta réponse. pour mon .bad, il me donne juste les enregistrements en erreur en fait. quand tu dis que tu a explicité le datatype lors de tes imports, c'est pour toutes les données ou seulement lorsque, comme moi, tu voulais en traiter une qui n'etait pas dans le fichier ? parce que en dehors de ce cas la, ca ne me semble pas obligatoire. en tous cas j'en avais jamais mis avant et ca marchait tres bien. sinon le VARCHAR ne fonctionne pas en fait. enfin ca ne fonctionne plus, j'ai une nouvelle erreur : Record 2: Rejected - Error on table "EIM_ACCOUNT", column PARTY_UID. end of logical record found when reading length of varying length field A priori, il cherche la donnée correspondante dans le fichier, tombe sur end of line et du coup ca lui plait pas
|
|
|
00
|
|
|
#4 | |
![]() ![]() Consultant en Business Intelligence Inscription : janvier 2007 Messages : 1 192 ![]() |
Bonjour,
Je ne réponds pas forcement à la question, mais as tu essayer de formater X_ATL_EXT_ID avant de l'affecter : ça peux être un trim ou autre, ce qui donnerais quelque chose comme : Peut être que ça passe Citation:
Sinon, j'utilise aussi bien des fichiers avec definitions des colonnes et d'autre sans et j'ai jamais rencontrer ce genre de problème... Donc je ne peux pas aider plus que ça. voili, voilou |
|
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Franck FlayelleConsultant CRM Inscription : mai 2004 Messages : 58 ![]() |
Bonjour,
pour le VARCHAR(100) j'avais essayé et ca ne fonctionnait pas(d'ailleurs le VARCHAR ne fonctionnait pas non plus en fait). j'avais pensé au trim pour enlever les espaces et du coup il ne me donnait plus d'erreur sur une donnée trop grande, mais par contre j'avais une autre erreur comme quoi il trouvait un end of line à mettre dans le fichier. J'ai l'impression que mon problème vient du fait qu'on me met un caractere special (une sorte de Y) pour indiquer la fin de la ligne dans mon fichier de donnée (Pourquoi c'est la grande question!) comme je fonctionne par separateur, quand j'en arrive a traiter mon party_uid il essaie de lire la donnée, tombe sur le caractere mis pour la fin de ligne et il doit interpreter ca comme s'il y avait une donnée a mettre dans le champs, sans avoir de separateur derrière pour lui indiquer la fin de la donnée. et donc il lit jusque la fin de la ligne et recupere le EOL qu'il ne veut pas inserer dans la colonne) au final, comme je n'avais pas envie de mettre trop de requete dans mon CTL, j'ai enlevée la copie du CTL et j'ai tout mis dans le traitement SQL qui suis mon import en tout cas merci pour vos reponses |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com