Bonjour, Je n'arrive pas à trouver sur le net comment utiliser sql loader avec des fichiers xml en définissant pour chaque balise xml le nom du champs dans la base de donnée est ce que quelqu'un a une idée.
Bonjour, Je n'arrive pas à trouver sur le net comment utiliser sql loader avec des fichiers xml en définissant pour chaque balise xml le nom du champs dans la base de donnée est ce que quelqu'un a une idée.
Bonjour à toi
à ma connaissance, SQL*Loader ne va te permettre de réaliser cela.
il va te falloir parser ton document XML et créer un arbre DOM
ensuite tu récupéres tes noeuds, attributs par des interrogations XPATH dans un type record
Voici un exemple sur lequel je mettai appuyer il y a plusieurs mois
ATTENTION : ne fonctionne qu'à partir de la 9i
en espérant t'avoir aider
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 CREATE OR REPLACE PROCEDURE CHARGER_AUDITEURS IS v_bfile BFILE; v_clob CLOB; v_parser dbms_xmlparser.Parser; v_doc dbms_xmldom.DOMDocument; v_nl dbms_xmldom.DOMNodeList; v_n dbms_xmldom.DOMNode; v_temp VARCHAR2(1000); TYPE tab_type IS TABLE OF auditeurs%ROWTYPE; t_tab tab_type := tab_type(); BEGIN v_bfile := BFileName('XML_DIR', 'auditeurs.xml'); DBMS_LOB.createtemporary(v_clob, cache=>FALSE); DBMS_LOB.open(v_bfile, dbms_lob.lob_readonly); DBMS_LOB.loadFromFile(v_clob,v_bfile,DBMS_LOB.getLength(v_bfile)); DBMS_LOB.close(v_bfile); -- make sure implicit date conversions are performed correctly DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''DD-MON-YYYY'''); -- Create a parser. v_parser := DBMS_XMLPARSER.newParser; -- Parse the document and create a new DOM document. DBMS_XMLPARSER.parseClob(v_parser, v_clob); v_doc := DBMS_XMLPARSER.getDocument(v_parser); -- Free resources associated with the CLOB and Parser now they are no longer needed. DBMS_LOB.freetemporary(v_clob); DBMS_XMLPARSER.freeParser(v_parser); -- liste des noeuds v_nl := DBMS_XSLPROCESSOR.selectNodes(DBMS_XMLDOM.makeNode(v_doc),'//AuditeurDEF'); -- type record FOR cur_auditeur IN 0..DBMS_XMLDOM.getLength(v_nl) - 1 LOOP v_n := DBMS_XMLDOM.item(v_nl, cur_auditeur); t_tab.extend; -- on utilise la syntaxe XPATH pour affecter les valeurs des éléments DBMS_XSLPROCESSOR.valueOf(v_n,'AuditeurID/text()',t_tab(t_tab.last).AuditeurID); DBMS_XSLPROCESSOR.valueOf(v_n,'AuditeurNOM/text()',t_tab(t_tab.last).AuditeurNOM); DBMS_XSLPROCESSOR.valueOf(v_n,'AuditeurPRENOM/text()',t_tab(t_tab.last).AuditeurPRENOM); END LOOP; FOR cur_auditeur IN t_tab.first .. t_tab.last LOOP INSERT INTO AUDITEURS VALUES (t_tab(cur_auditeur).AuditeurID, t_tab(cur_auditeur).AuditeurNOM, t_tab(cur_auditeur).AuditeurPRENOM); END LOOP; COMMIT; --on libére les ressources associées au document DBMS_XMLDOM.freeDocument(v_doc); EXCEPTION WHEN OTHERS THEN DBMS_LOB.freetemporary(v_clob); DBMS_XMLPARSER.freeParser(v_parser); DBMS_XMLDOM.freeDocument(v_doc); END CHARGER_AUDITEURS;
@
PpPool
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager