Bonjour,
Je souhaite importer des données en base Oracle via l'utilitaire sqlloader et un fichier .ctl (sous Oracle 11gR2).
J'ai toutefois un souci concernant l'exclusion de certaines lignes que je n'arrive pas à écrire pour que cela fonctionne correctement.
J'ai plusieurs fichiers sources (toto_***.txt) dont la structure est identique et plutôt que de travailler sur chaque fichier, je suis passée par la création d'un fichier unique (toto.txt) à partir de tous mes fichiers sources.
- Le fichier "toto.txt" a été crée via un batch qui fait appel à la commande copy C:\toto_*.txt D:\toto.txt.
- Chaque fichier toto_*.txt contient une ligne d'entête qui est donc copiée également dans le fichier final toto.txt (que je mets en pièce jointe à ce message)
C'est ce fichier concaténé que j'utilise pour intégrer les données via sqlloader sous Oracle, dans une table MON_SCHEMA.TOTO
Voici le contenu de mon fichier CTL_toto.ctl
Je m'attends à ce que les lignes commençant par "TOTO_" soient exclues de l'import mais ce n'est pas le cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 OPTIONS (DIRECT=FALSE, ROWS=10000, ERRORS=100000, SKIP=1) LOAD DATA CHARACTERSET UTF8 -- WE8MSWIN1252 -- INFILE 'D:\toto.txt' BADFILE 'D:\toto.bad' DISCARDFILE 'D:\toto.dsc' TRUNCATE --APPEND INTO TABLE MON_SCHEMA."TOTO" WHEN (2:7) <> 'TOTO_' FIELDS terminated BY "|" OPTIONALLY ENCLOSED BY '"' trailing nullcols (CHAMP_1 INTEGER EXTERNAL(19), CHAMP_2 INTEGER EXTERNAL(19), CHAMP_3 INTEGER EXTERNAL(19), CHAMP_4 INTEGER EXTERNAL(19), CHAMP_5 INTEGER EXTERNAL(19), CHAMP_6 INTEGER EXTERNAL(13))
Elles sont traitées "en erreur" et copiées dans le fichier toto.bad
Après analyse, j'ai compris qu'il y avait un caractère spécial qui était placé en début des lignes contenant "TOTO_0***" lors de la concaténation des fichiers toto_***.txt en toto.txt
Sauriez-vous comment faire pour supprimer ce caractère spécial lors de la concaténation des fichiers ?
Ou au moins comment faire pour que le .ctl permette effectivement de ne pas prendre en compte les lignes commençcant par "TOTO_0***" ?
Merci beaucoup,
MarieO
Partager