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; |
Partager