Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > SQL*Loader
SQL*Loader Forum d'entraide sur Oracle SQL*Loader
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 20h19   #1
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 18
Points : 18
Par défaut Sql*Loader sous Unix

Bonjour,

J'ai écrit un sql*loader pour charger un fichier XML.

J'ai un script Unix qui appelle mon .ctl. Mais comme mon fichier en entrée est un XML, j'ai un STR qui vient avec. D'autre part mon sql*loder est lancé par un programme. Mon problème est de passer mon STR au INFLE du point ctl tout en ayant un chemin dynamique.

Détails :

1) Le point CTL :

Code :
1
2
3
4
5
6
7
8
9
LOAD DATA   INFILE "/v0/tsx/dat/fic/Essai_Xml.xml" "str '</ROW>'"   
REPLACE INTO TABLE REGISTRE
TRAILING NULLCOLS
(
    DUMMY Filler terminated BY "<ROW>",
    ID_DOSSIER ENCLOSED BY "<ID_DOSSIER>" AND "</ID_DOSSIER>",
    NOM        ENCLOSED BY "<NOM>" AND "</NOM>",
    PRENOM     ENCLOSED BY "<PRENOM>" AND "</PRENOM>"
)
Ce code marche correctement. Il se trouve seulement que j'ai mon chemin en dur
Code :
"/v0/tsx/dat/fic/Essai_Xml.xml"
alors que dans mon Unix, il est dynamique.

2) Unix

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/ksh
 
Appl_log $ORACLE_SID $0 "I" "Début de Test_Xml"
 
m0="Chargement dans xml les informations reçues."
 
prg=test_xml.ctl 
LOAD=test_xml.log ; touch ${LOAD}
bad=test_xml.bad ; touch ${bad}
dsc=test_xml.dsc ; touch ${dsc}
 
fic=$fic_home/Essai_Xml.xml
 
m0=`echo ${m0} ${prg} ${load} ${bad} ${dsc}`
 
Appl_log $ORACLE_SID $0 "I" "Début ${m0}" 
 
$UTL_EXE/utl850u3 control=${prg} log=${LOAD}  bad=${bad} discard=${dsc}
Dans mon Unix, le lance mon sqlldr et lui transmet les paramètres.
Il reçoit entre autres le "fic" où le $fic_home varie selon les environnements. (DEV, TST, PORD).

D'autre part le prg reçoit mon .CTL dans lequel je dois lui faire passer le STR.

Autrement dit, lorsque j'exécute mon qui est le sqlldr, il prend le control file qui est . Ce dernier est mon point CTL. Seulement, comment je spécificie dans ce .CTL que mon chemin du INFILE doit être $fic_home et en plus d'avoir le Si j'arrive, je n'ai plus besoin du DATA dans sqlldr.

Ceci relève plutôt d'unix que sqlldr mais je me disais quand le plançant au forum Unix, ils ne connaîtraient pas les subtilités de Sqlldr.
Paxaranne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 19h36   #2
Futur Membre du Club
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 18
Points : 18
L'énnoncé était un peu compliqué peut-être. J'ai trouvé la solution.

Dans mon .CTL, mon premier argument qui est mon chemin vers mon fichier Xml, est une variable comme ceci :

Code :
LOAD DATA  INFILE  "fic"  "str '</ROW>'"
Ensuite dans mon Unix, fic reçoit mon chemin vers mon fichier comme ceci:

Code :
fic=$fic_home/Test_Xml.xml
J'exécute mon sqlldr à l'intérieur de mon Unix en lui passant les paramètre

Code :
control=${prg} log=${LOAD} DATA=${fic} bad=${bad} discard=${dsc}
Paxaranne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h07.


 
 
 
 
Partenaires

Hébergement Web