|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 3 ![]() |
Bonjour,
Je m'excuse d'avance si ce sujet a déjà été traité, mais je n'ai pas trouvé de réponse exacte à mon problème. Je souhaite charger un fichier à plat au format CSV dans une base Oracle 9i. J'ai du mal a écrire mon fichier de contrôle pour mener à bien cette opération car j'ai une contrainte qui est la suivante : Mon fichier à plat contient 28 colonnes, dont l'ordre ne peut pas être changé. Les 20 premières colonnes doivent aller dans une table, pour cela pas de problème. Par contre, les 2 premières colonnes et les 8 dernières doivent aller dans une 2ème table. Je voudrais faire cette opération avec un seul fichier d'import (CSV) et un seul fichier de contrôle (CTL) pour SQL*LOADER. J'ai essayé avec 2 clauses "into" dans le fichier de contrôle mais sans succès car je ne sais pas comment "aiguiller/dupliquer" correctement les 2 premières colonnes + les 8 dernières dans la 2ème table... car il n'existe pas de "mapping" avec SQL*LOADER (enfin à ma connaissance). J'ai réussi en trichant : Dupliquer les 2 premières colonnes en question avant les 8 dernières dans le fichier, mais ce n'est pas bon parce que dans les faits je ne pourrai pas changer la structure du fichier d'import, j'ai fait cela juste pour tester... Autre contrainte de taille, je ne peux pas utiliser l'option POSITION, car mes champs peuvent être amenés à changer dans le temps donc pas question d'utiliser le format fixe, j'ai un séparateur point-virgule dans mon fichier à plat et je dois m'en contenter. Toute aide sur la question est la bienvenue. Je vous en remercie d 'avance. |
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2006 Messages : 113 ![]() |
Bonjour,
tu trouveras la réponce à ton problème sur le lien suivant: http://jaouad.developpez.com/sqlldr/ V-D. Comment charger les mêmes données dans plusieurs tables Ici on va séparer les enregistrements des fichiers dans deux tables différentes : Les nom dans la table dvp_loader et les salaires dans la table dvp2_loader. Changer le fichier de contrôle : LOAD DATA INFILE 'data.csv' INTO TABLE DVP_LOADER FIELDS TERMINATED BY ';' ( NOM ) INTO TABLE DVP2_LOADER FIELDS TERMINATED BY ';' TRAILING NULLCOLS ( b ) Lancer la commande. Le résultat : SQL> select * from dvp_loader ; NOM SALAIRE -------------------- ---------- Jaouad orafrance léoanderson bouyao Nuke_y sheikyerbouti pomalaix titides aline denisys niourk 11 ligne(s) sélectionnée(s). SQL> select * from dvp2_loader ; A B -------------------- ---------- 100 200 300 400 500 600 700 800 900 1000 1100 11 ligne(s) sélectionnée(s). J'espere que c'est ce que tu cherche Bonne journée |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 3 ![]() |
Merci pour votre réponse rapide.
J'avais déjà consulté le tutoriel de Jaouad, qui est très bien expliqué d'ailleurs. Mais le fait est que l'exemple proposé ne dit pas comment faire en sorte qu'une seule et même colonne du fichier à plat soit injectée dans 2 tables différentes, sans que cette donnée ne soit dupliquée dans le fichier d'import. Sur l'exemple proposé, il n'est pas expliqué comment il serait possible de mettre les NOMS dans la première ET la deuxième table, et les SALAIRES seulement sur la deuxième, et c'est plutôt cela que je cherche à faire dans mon cas. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : octobre 2006 Messages : 3 ![]() |
Le problème est réglé, Jaouad m'a dit qu'il est impossible d'effectuer ce que je veux faire...
Dommage mais au moins je suis fixé! @+ |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 319 ![]() |
Utilisez une table externe à la place du chargement par SQL Loader et fait les insertions dans l'ordre imposé par les constraints.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com