Bonjour,
j'ai un fichier XML stocké dans le systeme et je veux parser ce fichier XML avec PL SQL dont voila le code de la procedure :
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
70
71
72
73
74
75
76
77
78
79
80
81
PROCEDURE    READXML
(
        path IN varchar2,
        file IN varchar2,
        errors_file IN varchar2
) IS
        parser xmlParser.parser;
        document xmlDom.DomDocument;
 
        nodes xmlDom.DomNodeList;
        node xmlDom.DomNode;
        length1 number;
        length2 number;
        element xmlDom.DomElement;
        attributes xmlDom.DomNamedNodeMap;
        attributename varchar2(100);
        attributevalue varchar2(100);
 
BEGIN
 
 -- Creer un nouveau parseur
 parser := xmlParser.NewParser;
 
 -- Règle les parametres du parseur
 xmlParser.SetValidationMode(parser, FALSE);
 xmlParser.SetErrorLog(parser, path || '/' || errors_file);
 xmlParser.SetBaseDir(parser, path);
 
 -- Parse le fichier
 xmlParser.Parse(parser, path || '/' || file);
 
 -- Recupère un document
 document := xmlParser.GetDocument(parser);
 
 --------------------
 -- affiche les noeuds trouvés
 --------------------
 dbms_output.put_line('Show Elements :');
 nodes := xmlDom.GetElementsByTagName(document, '*');
 length1 := xmlDom.GetLength(nodes);
 FOR i IN 0..length1-1 LOOP
   -- Affecte le noeud comme noeud courant
   node := xmlDom.Item(nodes, i);
   dbms_output.put(xmlDom.GetNodeName(node) || '   ');
 END LOOP;
 dbms_output.put_line(' ');
 --------------------
 
 --------------------
 -- Affiche les Attributs de chaque noeud
 --------------------
 dbms_output.put_line('');
 FOR i IN 0..length1-1 LOOP
   -- Affecte le noeud comme noeud courant
   node := xmlDom.Item(nodes, i);
   element := xmlDom.MakeElement(node);
   dbms_output.put(xmlDom.GetTagName(element) || ' :');
 
   attributes := xmlDom.GetAttributes(node);
 
   IF NOT xmlDom.isNull(attributes) THEN
      length2 :=  xmlDom.GetLength(attributes);
      FOR j IN 0..length2-1 LOOP
          -- Affecte l'attribut comme attribut courent
          node := xmlDom.Item(attributes, j);
          attributename := xmlDom.GetNodeName(node);
          attributevalue := xmlDom.GetNodeValue(node);
          dbms_output.put(' ' || attributename || '=' || attributevalue);
      END LOOP;
      dbms_output.put_line(' ');
   END IF;
 END LOOP;
 --------------------
 
 -- libère le document
 xmlDom.FreeDocument(document);
 
 -- libère le parser
 xmlParser.FreeParser(parser);
 
END;
mais lors j'execute la procedure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
DECLARE
BEGIN
 
-- Now call the stored program
  tp.readxml('C:\TEMP','TEST.xml','histo.txt');
 
EXCEPTION
WHEN OTHERS THEN
  dbms_output.put_line(SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1, 255));
RAISE;
END;
une erreur est signalé à savoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[1]: (Error): ORA-31020: L'opération est interdite ; raison : Not supported ORA-06512: à ligne 10
Merci de votre aide?
Remarque :
je pose des questions dans le forum mais je n'obtiens pas ni solutions ni remarque !! (Soit je suis pas clair dans les questions soit ....??)