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 :
et au chargement de mon fichier, j'obtenais l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 load data Append INTO table EIM_ACCOUNT WHEN fil1 = '10' FIELDS terminated by ";" TRAILING NULLCOLS ( fil1 filler, X_ATL_EXT_ID, ROW_ID SEQUENCE(1), ACTIVE_FLG CONSTANT 'Y', PARTY_UID ":X_ATL_EXT_ID" )
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
Partager