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);
DBMS_SESSION.SET_NLS('NLS_DATE_FORMAT','''DD-MON-YYYY''');
-- Création d'un PARSER
v_parser := DBMS_XMLPARSER.newParser;
-- On parse le document et on crée un nouveau document DOM
DBMS_XMLPARSER.parseClob(v_parser, v_clob);
v_doc := DBMS_XMLPARSER.getDocument(v_parser);
-- On libére les ressources associées à v_clob et v_parser, comme nous n'en avons plus besoin
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 (1 item = 1 noeud de la liste v_nl)
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; |
Partager