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 70 71 72 73
|
procedure integ()
l_bfile BFILE;
l_clob CLOB;
l_parser dbms_xmlparser.Parser;
l_doc dbms_xmldom.DOMDocument;
l_nl dbms_xmldom.DOMNodeList;
l_nl2 dbms_xmldom.DOMNodeList;
l_n2 dbms_xmldom.DOMNode;
l_n dbms_xmldom.DOMNode;
src_csid NUMBER := NLS_CHARSET_ID('UTF8');
dest_offset INTEGER := 1;
src_offset INTEGER := 1;
lang_context INTEGER := dbms_lob.default_lang_ctx;
warning INTEGER;
Ordre_Preparation Varchar2(50);
Code_Article Number;
Qte Number;
BEGIN
l_bfile := BFileName(PATH,FIC_XML);
dbms_session.set_nls('NLS_DATE_FORMAT','''DD-MON-YYYY''');
dbms_lob.createtemporary(l_clob, cache=>FALSE);
dbms_lob.open(l_bfile, dbms_lob.lob_readonly);
dbms_lob.loadclobfromFile( l_clob,
l_bfile,
dbms_lob.getLength(l_bfile),
dest_offset,
src_offset,
src_csid,
lang_context,
warning);
dbms_lob.close(l_bfile);
l_parser := dbms_xmlparser.newParser;
dbms_xmlparser.parseClob(l_parser, l_clob);
l_doc := dbms_xmlparser.getDocument(l_parser);
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
l_nl := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'/OPs/OP');
-- Boucle entete
FOR cur_stage_xml IN 0 .. dbms_xmldom.getLength(l_nl)-1 LOOP
l_n := dbms_xmldom.item(l_nl, cur_stage_xml);
dbms_xslprocessor.valueOf(l_n,'OrdrePreparation/text()',Ordre_Preparation);
l_nl2 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'/OPs/OP/Ligne');
-- Boucle détail
FOR cur_stage_xml2 IN 0 .. dbms_xmldom.getLength(l_nl2) LOOP
l_n2 := dbms_xmldom.item(l_nl2, cur_stage_xml2);
dbms_xslprocessor.valueOf(l_n2,'CodeArticle/text()',Code_Article);
dbms_xslprocessor.valueOf(l_n2,'Quantite/text()',Qte);
INSERT INTO MATABLE (OrdrePreparation,CodeArticle,Quantite)
VALUES(Ordre_Preparation,Code_Article,Qte);
END LOOP;
END LOOP;
COMMIT;
dbms_xmldom.freeDocument(l_doc);
END; |
Partager