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

SQL Oracle Discussion :

Problème d'exportation d'un clob dans fichier XML


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Problème d'exportation d'un clob dans fichier XML
    Bonjour,
    A partir d'une base oracle 9i, je souhaite créer un fichier xml contenant les valeurs d'une de mes tables.
    L'un des champs de cette table est un clob, ce qui me pose un problème car la méthode createtextnode que j'utilise pour générer mon arbre xml prend en entrée un varchar2.

    Lorsque j'exporte mon champ clob 'TX_CUSTXSL' et que celui-ci est trop long pour être contenu par un varchar2 j'ai l'erreur :

    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "UISYSTEM.THINQ_TO_PROD_SELFSERVICE", line 60
    ORA-06512: at line 9
    Voici un extrait de mon code :
    ...
    doc := xmldom.newdomdocument;
    -- create root element
    main_node := xmldom.makenode (doc);
    root_elmt := xmldom.createelement (doc, 'main');
    root_node := xmldom.appendchild (main_node, xmldom.makenode (root_elmt));

    FOR get_systtext_rec IN curssysttext LOOP
    item_elmt := xmldom.createelement (doc, 'DATA_RECORD');
    user_node := xmldom.appendchild (root_node, xmldom.makenode (item_elmt));
    ...

    item_elmt := xmldom.createelement (doc, 'TX_CUSTXSL');
    item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
    item_text := xmldom.createtextnode (doc, get_systtext_rec.TX_CUSTXSL);
    item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));
    END LOOP;


    xmldom.writetofile (doc, TO_CHAR (SYSDATE, 'yyyymmdd') || '.xml' );
    xmldom.freedocument (doc);
    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    on n'a pas la déclaration des variables ni la ligne en erreur alors je vois mal comment on pourrait t'aider

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oups désolé , voici donc ma procédure complete avec en gras la ligne en erreur :

    CREATE OR REPLACE PROCEDURE thinq_to_prod_selfservice (
    nomtable IN VARCHAR2,
    brandingid IN VARCHAR2,
    txcustxsl IN VARCHAR2
    )
    IS
    p_dir VARCHAR2(200):='d:\oracle\admin\THINQP53\UTL_FILE_DIR\';
    p_file VARCHAR2(200):=nomtable || '_' || brandingid || '_' || txcustxsl;

    doc xmldom.domdocument;
    main_node xmldom.domnode;
    root_node xmldom.domnode;
    user_node xmldom.domnode;
    item_node xmldom.domnode;
    root_elmt xmldom.domelement;
    item_elmt xmldom.domelement;
    item_text xmldom.domtext;

    CURSOR curssysttext
    IS
    SELECT ID_BRANDING, NM_CUSTXSL, TX_CUSTXSL
    FROM selfservicecustomxsl
    WHERE id_branding = brandingid AND nm_custxsl = txcustxsl;

    BEGIN

    doc := xmldom.newdomdocument;
    -- create root element
    main_node := xmldom.makenode (doc);
    root_elmt := xmldom.createelement (doc, 'main');
    root_node := xmldom.appendchild (main_node, xmldom.makenode (root_elmt));

    FOR get_systtext_rec IN curssysttext LOOP
    item_elmt := xmldom.createelement (doc, 'DATA_RECORD');
    user_node := xmldom.appendchild (root_node, xmldom.makenode (item_elmt));

    item_elmt := xmldom.createelement (doc, 'ID_BRANDING');
    item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
    item_text := xmldom.createtextnode (doc, get_systtext_rec.id_branding);
    item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));

    item_elmt := xmldom.createelement (doc, 'NM_CUSTXSL');
    item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
    item_text := xmldom.createtextnode (doc, get_systtext_rec.nm_custxsl);
    item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));

    item_elmt := xmldom.createelement (doc, 'TX_CUSTXSL');
    item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
    item_text := xmldom.createtextnode (doc, get_systtext_rec.TX_CUSTXSL);
    item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));

    END LOOP;

    -- write document to file using default character set from database
    xmldom.writetofile (doc, p_dir || TO_CHAR (SYSDATE, 'yyyymmdd') || '_' || p_file || '.xml' );
    -- free resources
    xmldom.freedocument (doc);
    END;
    /
    Et voici l'erreur :
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "UISYSTEM.THINQ_TO_PROD_SELFSERVICE", line 49
    ORA-06512: at line 9

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    la ligne en erreur ce serait plutôt :
    item_text := xmldom.createtextnode (doc, get_systtext_rec.id_branding);
    la ligne 9 du corps tel que c'est indiqué :
    ORA-06512: at line 9
    et avec un TO_CHAR ça devrait régler le problème

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide Fred_D , mais cela ne fonctionne pas.

    J'ai modifié de la sorte :
    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
    ...
    item_elmt := xmldom.createelement (doc, 'ID_BRANDING');
          item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
          item_text := xmldom.createtextnode (doc, TO_CHAR(get_systtext_rec.id_branding));
          item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));
    
          item_elmt := xmldom.createelement (doc, 'NM_CUSTXSL');
          item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
          item_text := xmldom.createtextnode (doc, TO_CHAR(get_systtext_rec.nm_custxsl));
          item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));
          
    	  item_elmt := xmldom.createelement (doc, 'TX_CUSTXSL');
          item_node := xmldom.appendchild (user_node, xmldom.makenode (item_elmt));
    	  item_text := xmldom.createtextnode (doc,  TO_CHAR(get_systtext_rec.TX_CUSTXSL));
    	  item_node := xmldom.appendchild (item_node, xmldom.makenode (item_text));
    ...
    Mais j'ai toujours la même erreur...


    Je ne pense pas que ce soit au niveau du branding_id, voila pourquoi:

    Voici deux appels différents de ma procédure :

    Celui-là fonctionne :
    thinq_to_prod_selfservice ( 'selfservicecustomxsl', 'PwCGlobal', 'ShowBeginEndDate');

    Celui-là plante :
    thinq_to_prod_selfservice ( 'selfservicecustomxsl', 'PwCGlobal', 'ShowFrameNavigation');
    On remarque que seul le troisième paramètre change entre les deux appels. Et ce troisième parametre correspond au champs Clob 'TX_CUSTXSL' qui contient un texte beaucoup plus grand dans le cas ou ca plante que dans l'autre cas.
    Voilà pourquoi je pense que c'est un probleme du au clob qui est trop grand pour etre integré dans le varchar2 de la fonction.

    (j'espere avoir ete assez clair )

Discussions similaires

  1. Export CLOB dans fichier texte
    Par Hurricae dans le forum Oracle
    Réponses: 13
    Dernier message: 21/02/2012, 09h09
  2. Réponses: 13
    Dernier message: 23/09/2011, 19h24
  3. Export de données Oracle dans fichier XML ?
    Par Ofeller dans le forum Import/Export
    Réponses: 0
    Dernier message: 09/12/2008, 19h42
  4. [DOM] Chargement de données dans fichier XML ?
    Par titoc dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 01/06/2008, 13h31
  5. [XPATH] problème lecture dans fichier XML
    Par DiamonDonald dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/02/2008, 10h57

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