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 durCode:
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:"/v0/tsx/dat/fic/Essai_Xml.xml"
2) Unix
Dans mon Unix, leCode:
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:$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 estCode:$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 leCode:${prg}
Si j'arrive, je n'ai plus besoin du DATA dans sqlldr.Code:"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.