Bonjour,
c'est après avoir lu la doc et fait des recherches que je me permets de poster une demande d'aide.
Le contexte : j'ai plusieurs tables à charger en données, sachant que j'ai un fichier .txt par table à charger.
D'après ce que j'ai pu trouver/lire sur le net SQLLDR permet de :
- charger plusieurs fichiers dans une même table
- charger 1 fichier dans plusieurs tables
Ce que je veux faire c'est les deux à la fois, c'est-à-dire, dans la même instance de load, charger 1 fichier X.txt dans la table X, 1 fichier Y.txt dans la table Y, etc ...
je me suis basé sur la doc oracle :
To load data from multiple datafiles in one SQL*Loader run, use an INFILE clause for each datafile. Datafiles need not have the same file processing options, although the layout of the records must be identical. For example, two files could be specified with completely different file processing options strings, and a third could consist of data in the control file.
et cette page : http://www.orafaq.com/wiki/SQL*Loade...les_at_once.3F
Voici donc ma commande :
sqlldr OREF/OREF@XE control=m:\CREATION_BASE\ScriptImport\test02\loadDatasOREF_02.ctl bad=m:\CREATION_BASE\ScriptImport\test02\bad.txt log=m:\CREATION_BASE\ScriptImport\test02\log.txt skip=1
et mon control file :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| LOAD DATA
-- Integration données de la table artisan
INFILE 'm:\TablesDatas\NOM\ARTISAN.txt'
REPLACE -- fonction replace permettant
INTO TABLE NOM_ARTISAN
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
(NOM_ARTISAN_CODE,
ARTISAN_lib
)
-- Integration de la table artisan
INFILE 'm:\TablesDatas\NOM\CJ.txt'
REPLACE -- test de loption replace sur table vide
INTO TABLE NOM_CJ
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
(NOM_CJ_CODE,
CJ_lib
)
-- test integration table FAP84_1993 avec integrités réferentielles (table FAP22_1993)
INFILE 'm:\TablesDatas\NOM\FAP84_1993.txt'
REPLACE
INTO TABLE NOM_FAP94_1993
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
(NOM_FAP84_1993_CODE,
FAP84_1993_lib
) |
Malheureusement ma syntaxe ne doit pas être la bonne. voici ce que donne le fichier log :
1 2 3 4 5 6 7 8 9
|
SQL*Loader: Release 10.2.0.1.0 - Production on Jeu. Août 21 15:40:30 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-350: Erreur de syntaxe en ligne 14.
Mot-clé INTO attendu, Mot-clé infile trouvé.
INFILE 'm:\TablesDatas\NOM\CJ.txt'
^ |
Pour le moment je pense pouvoir contourner le pb en faisant un batch executant autant de commande SQLLDR que j'ai de fichier ... mais bon ... j'ai à peu près 150 tables à remplir ....
comment faire tout ds la même instance SQLLDR ???
Merci d'avance de vos réponses,
Cordialement,
GR
Partager