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 de génération de XML avec DBMS_XMLGEN


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Par défaut Problème de génération de XML avec DBMS_XMLGEN
    Bonjour

    Je rencontre un problème avec l'utilisation de DBMS_XMLGEN pour générer un XML au sein d'une procédure.
    Le problème est le suivant : pour générer la valeur du noeud d'ID "info_r_v" (cf code ci-dessous), j'appelle une fonction stockée "GET_INFO_R_V()", qui génère une chaine de caractère pouvent être (très) longue. Pour cette raison, le type retournée par la fonction est un CLOB. La fonction a été testée et fonctionne correctement.

    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
    CREATE OR REPLACE PROCEDURE GENERER_XML(A IN NUMBER, B IN varchar2, C IN CHAR, D IN varchar2)AS
    
      qryCtx DBMS_XMLGEN.ctxHandle;
      resultat CLOB := EMPTY_CLOB();
      read_amount    integer;
      read_offset    integer;
      fini           integer;
      fileXML         utl_file.file_type;
      contenuXML     VARCHAR2(32760);
      position       integer;
      
    BEGIN  
    
      qryCtx := DBMS_XMLGEN.newContext
        ('SELECT distinct XMLAgg(
    	    XMLElement("ElementRoot",		
    			XMLElement("attribute",
    				XMLAttributes(''cat'' AS "id"),
    				XMLElement("value",
    					art.description
    				)
    			),
    			XMLElement("attribute",
    				XMLAttributes(''info_r_v'' AS "id"),
    				XMLElement("value",
    					XMLCDATA(GET_INFO_R_V(art.id_article, '''||C||'''))
    				)
    			)
    		)
    	 ) AS "items"
    	FROM Articles art');
      DBMS_XMLGEN.setRowSetTag(qryCtx, null);
      DBMS_XMLGEN.setRowTag(qryCtx, null);
      -- récupération du XML résultant dans un CLOB
      resultat := DBMS_XMLGEN.getXML(qryCtx);
      
      -- Puis écriture de ce CLOB dans un fichier (OK)
      
    END;

    Mais lors de l'exécution de la procédure, j'obtiens l'erreur :
    ORA-19202: Une erreur s'est produite lors du traitement la fonction XML (
    ORA-22835: Taille de tampon insuffisante pour la conversion de CLOB en CHAR ou de BLOB en RAW (réelle : 5735, maximum : 4000)
    )
    ORA-06512: à "SYS.DBMS_XMLGEN", ligne 7
    ORA-06512: à "SYS.DBMS_XMLGEN", ligne 147
    ORA-06512: à "FAS6.GENERATE_XML_ARTICLES", ligne 418
    ORA-06512: à ligne 12

    En fait, il semblerait que l'appel à DBMS_XMLGEN.getXML() traite chaque ligne du XML comme un (var)char avant de l'ajouter au CLOB. Mais un (var)char étant limité à 4000 caractères, si la fonction GET_INFO_R_V() en renvoie plus, une exception est levée.
    Si je limite la taille de la chaine retour de GET_INFO_R_V() à 4000 caractères à l'aide de DBMS_LOB.SUBSTR(), là tout fonctionne correctement...

    Comment faire pour pouvoir générer une ligne longue de plus de 4000 caractères dans un XML?

    Merci d'avance!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 5
    Par défaut
    Hmmm... Il semblerait que le problème vienne de l'appel à la fonction XMLCDATA() d'Oracle, qui prend un varchar2 en entrée... D'où la limitation aux 4000 caractères...
    Mais si je ne le met pas, tous mes caractères spéciaux sont systématiquement échappés (ex : " " " au lieu de " ' "), et ce malgré l'instruction "DBMS_XMLGEN.SetConvertSpecialChars(qryCtx, false);".

    Quelqu'un a-t-il déjà rencontré un problème similaire? Comment passer outre cette limitation du nombre de caractères?

Discussions similaires

  1. Réponses: 20
    Dernier message: 14/06/2008, 14h18
  2. Problème de génération de pdf avec Birt
    Par nabolo dans le forum BIRT
    Réponses: 2
    Dernier message: 15/11/2007, 09h36
  3. [Forms]Problème de génération de fmx avec forms
    Par estalol1 dans le forum Forms
    Réponses: 4
    Dernier message: 11/01/2007, 12h08
  4. [encoding] Problème pour les fichiers XML avec notepad
    Par lehamster dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/11/2006, 15h56
  5. [SAX] Java : problème de lecture d'XML avec SAX
    Par TheReturnOfMuton dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 22/06/2006, 18h26

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