Bonjour tout le monde,
Mon but est de charger les données d'un fichier XML dans une table d'une base de données Oracle en passant par une requête SQL*Loader et un fichier de description CTL.
1 - Requête SQL*Loader utilisée:
2 - Format du fichier XML en entrée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 sqlldr\ userid= user\ control=path_to_ctl\ data=path_to_xml\ log=path_to_log\ bad=path_to_bad\ discard=path_to_dsc\ silent='header,feedback'
3- Format du fichier CTL:
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 <?xml version="1.0" encoding="utf-8"?> <!-- Created with Liquid XML 2013 Designer Edition (Trial) 11.1.0.4725 (http://www.liquid-technologies.com) --> <socle:FLUX xmlns:obj="http://Objets_Metiers" xmlns:socle="http://Socle_Librairie" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <EnTete> ....... </EnTete> <Donnees> <obj:DOMAINE> <C1>VAL1_C1</C1> <C2> <C21>VAL1_C2</C21> </C2> <C3>VAL1_C3</C3> </obj:DOMAINE> </Donnees> </socle:FLUX>
4- Erreur obtenue à l'éxcution du code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 LOAD DATA INFILE "fic" "str '</obj:DOMAINE>'" append INTO TABLE MA_TABLE TRAILING NULLCOLS ( dummy filler terminated by ">", C1 ENCLOSED BY "<C1>" AND "</C1>", C2 ENCLOSED BY "<C2><C21>" AND "</C21></C2>", C3 ENCLOSED BY "<C3>" AND "</C3>" )
D'après les logs, on remarque que le programme a lu 2 records, alors qu'il n'existe qu'un seul enregistrement dans le fichier XML.
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
19 Record 1: Rejected - Error on table MA_TABLE, column C1. Initial enclosure character not found Record 2: Rejected - Error on table MA_TABLE, column C1. Initial enclosure character not found Table MA_TABLE: 0 Rows successfully loaded. 2 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null. Space allocated for bind array: 49536 bytes(64 rows) Read buffer bytes: 1048576 Total logical records skipped: 0 Total logical records read: 2 Total logical records rejected: 2 Total logical records discarded: 0
Il est fort probable que le fichier CTL ne décrit pas bien le fichier XML en entrée, et c'est pour ça que je me tourne vers vous.
Merci également de bien noter si la description de la balise <C2><C21> est bien faite dans le fichier CTL.
Je vous remercie d'avance pour vos suggestions.
Cordialement.
Partager