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 :
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
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 :
[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 ....??)
Partager