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 :
Ce code marche correctement. Il se trouve seulement que j'ai mon chemin en dur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>" )alors que dans mon Unix, il est dynamique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "/v0/tsx/dat/fic/Essai_Xml.xml"
2) Unix
Dans mon Unix, le
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
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}lance mon sqlldr et lui transmet les paramètres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $UTL_EXE/utl850u3
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 monqui est le sqlldr, il prend le control file qui est
Code : Sélectionner tout - Visualiser dans une fenêtre à part $UTL_EXE/utl850u3. 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part ${prg}Si j'arrive, je n'ai plus besoin du DATA dans sqlldr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "str '</ROW>'"
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.
Partager