IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

ORA-31011: XML parsing failed


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut ORA-31011: XML parsing failed
    Bonjour ,

    je vous présente mon Problème ,

    je veux extraire des tables une base oracle sur un serveur distant sous format XML alors j'ai mis en place une solution en procédure PLSQL qui importe les table de la base distant vers ma base en local (base en local version 10G avec caractère set UTF-8)
    et je fait l'extraction en XML des tables importer .

    les tables sont tous des VARCHAR2 , NUMBER , DATE mais il y'a des colonne VARCHAR2 contient des charactere spéciaux (&,@,",',Ø,^,.....)

    le problème que la solution génère un erreur ORA 31011 sur l'un des tables

    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
     
    CREATE OR REPLACE PROCEDURE "GENERATEXML" ( TableToExtract VARCHAR2) AS
     
    XMLextracted   	CLOB;
    XMLContext 	dbms_xmlgen.ctxHandle;
     
    BEGIN
     
            XMLContext   := DBMS_XMLGEN.NEWCONTEXT('select * from '||TableToExtract);
     
            DBMS_XMLGEN.SETCONVERTSPECIALCHARS (XMLContext,true);
     
            XMLextracted := DBMS_XMLGEN.GETXML(XMLContext);
     
           DBMS_XMLGEN.CLOSECONTEXT(XMLContext);
     
    ....
     
    EXCEPTION
     
    	WHEN OTHERS THEN
     
    		DBMS_OUTPUT.PUT_LINE(' ERROR in the fonction GenerateXML : '); 
     
    		DBMS_OUTPUT.PUT_LINE('code : '||sqlcode); 
     
    		DBMS_OUTPUT.PUT_LINE('message : '||sqlerrm); 
     
        ROLLBACK;
     
      END GenerateXML;

    voici un exemple de données dans l'image qui génère l'erreur Nom : Sans titre.png
Affichages : 1344
Taille : 10,1 Ko


    merci d'avance

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pourriez-vous nous fournir un jeu d'essai qui provoque l'erreur ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 22
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    peut-être il y a réellement des caractères interdit par XML dans la table. Quelques-uns des séquences d'Unicode sont prohibés dans XML.
    Un exemple:
    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
     
    export NLS_LANG=FRENCH_FRANCE.AL32UTF8
    sqlplus "TEST_SCHEMA@ORCL102"
     
    test_schema@ORCL102> select VALUE from v$nls_parameters where PARAMETER = 'NLS_CHARACTERSET';
    VALUE
    --------
    AL32UTF8
     
     
    test_schema@ORCL102>CREATE TABLE test_table(
        id NUMBER primary key,
        val VARCHAR2(4000))
    /
     
    Table créée.
     
    test_schema@ORCL102> insert into TEST_TABLE (ID,VAL) values (1,'STRING_1');
     
    1 ligne créée.
     
    test_schema@ORCL102> insert into TEST_TABLE (ID,VAL) values (2,'STRING_2');
     
    1 ligne créée.
     
    test_schema@ORCL102> commit;
     
    Validation effectuée.
    Générons le XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    set serveroutput on
    declare
        V_XML_CLOB clob;
        V_XML_CONTEXT dbms_xmlgen.ctxhandle;
    begin
        V_XML_CONTEXT := dbms_xmlgen.newcontext('select * from TEST_TABLE');
        V_XML_CLOB := dbms_xmlgen.getxml(V_XML_CONTEXT);
        dbms_output.put_line(substr(V_XML_CLOB,1,32000));
        dbms_xmlgen.closecontext(V_XML_CONTEXT);
    end;
    /
    Le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0"?>
    <ROWSET>
     <ROW>
      <ID>1</ID>
      <VAL>STRING_1</VAL>
     </ROW>
     <ROW>
      <ID>2</ID>
      <VAL>STRING_2</VAL>
     </ROW>
    </ROWSET>
    Insérons une caractère interdite par XML (chr(0)) dans la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    test_schema@ORCL102> insert into TEST_TABLE (ID,VAL) values (3,chr(0));
    1 ligne créée.
     
    test_schema@ORCL102> commit;
    Validation effectuée.
    Effectuons le script. Le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ERREUR à la ligne 1 :
    ORA-31011: Echec d'analyse XML
    ORA-06512: à "SYS.DBMS_XMLGEN", ligne 7
    ORA-06512: à "SYS.DBMS_XMLGEN", ligne 147
    ORA-06512: à ligne 6
    Vous pouvez rechercher des séquences interdites avec la fonction UTL_RAW.CAST_TO_RAW.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select ID, utl_raw.cast_to_raw(VAL) "RAW"
    from TEST_TABLE
    order by ID
    /
     
          ID RAW
    ---------- -----------------
             1 535452494E475F31
             2 535452494E475F32
             3 00

Discussions similaires

  1. [PHP] parsing failed
    Par eric.pommereau dans le forum XMLRAD
    Réponses: 17
    Dernier message: 09/05/2007, 23h00
  2. [Tableaux] XML parsing en PHP
    Par dimitryous dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2007, 19h52
  3. Réponses: 3
    Dernier message: 30/01/2006, 13h43
  4. XML Parsing Error: not well-formed
    Par localhost dans le forum Valider
    Réponses: 5
    Dernier message: 16/06/2005, 14h20
  5. Réponses: 14
    Dernier message: 25/10/2004, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo