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 : 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>"
)
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
"/v0/tsx/dat/fic/Essai_Xml.xml"
alors que dans mon Unix, il est dynamique.

2) Unix

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}
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.