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 :

DBMS_XMLSave.insertXML crée les lignes mais ne met pas les data


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut DBMS_XMLSave.insertXML crée les lignes mais ne met pas les data
    Bonjour,
    Je travaille avec la version "Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production"

    J'essaie de charger une table avec des données XML stockées dans un CLOB.

    J'ai une table TEST définie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table TEST
    (
      FIELD1 VARCHAR2(5),
      FIELD2 VARCHAR2(5),
      FIELD3 VARCHAR2(5)
    )
    Lorsque j'exécute ceci :
    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
     
    DECLARE
      c CLOB := NULL;
      ctxtype DBMS_XMLSave.ctxType;
      lines number;
    BEGIN
    -- create CLOB
      c:='<ROWSET><ROW><field1>1.1</field1><field2>1.2</field2><field3>1.3</field3></ROW><ROW><field1>2.1</field1><field2>2.2</field2><field3>2.3</field3></ROW><ROW><field1>3.1</field1><field2>3.2</field2><field3>3.3</field3></ROW></ROWSET>';
    -- create CONTEXT
      ctxtype := DBMS_XMLSave.newContext('test');
    -- Get result
      lines := DBMS_XMLSave.insertXML(ctxtype, c);
    -- close CONTEXT
      DBMS_XMLSave.closeContext(ctxtype);
    -- Commit
      commit;
    END;
    tout se passe bien, je n'ai aucune erreur.

    Mais lorsque je regarde le contenu de la table, je vois bien que 3 lignes ont été ajouté, mais que le contenu des champs est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL> select * from test;
     
    FIELD FIELD FIELD
    ----- ----- -----
    Pourquoi ?

    merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    je ne suis pas expert en CLOB, mais as-tu remarqué que tu cherches à stocker un CLOB dans un varchar2(5) ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Jerome_Mtl Voir le message
    je ne suis pas expert en CLOB, mais as-tu remarqué que tu cherches à stocker un CLOB dans un varchar2(5) ?
    Je n'ai pas du être assez clair.

    Voici quelques explications supplémentaires, en espérant que cela va éclairer vos lanternes

    le CLOB contient un XML :
    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
     
    <ROWSET>
    <ROW>
    <field1>1.1</field1>
    <field2>1.2</field2>
    <field3>1.3</field3>
    </ROW>
    <ROW>
    <field1>2.1</field1>
    <field2>2.2</field2>
    <field3>2.3</field3>
    </ROW>
    <ROW>
    <field1>3.1</field1>
    <field2>3.2</field2>
    <field3>3.3</field3>
    </ROW>
    </ROWSET>
    En clair il défini 3 lignes. Je voudrais charger ses 3 lignes dans ma table test et avoir les données mises au bon endroit en fonction du <tag> du XML. Bref je cherche a charger "1.1", "1.2", ...,"3.2", "3.3" dans des VARCHAR2(5). Ce qui est suffisant étant donné que chaque valeur fait 3 caractères de long

    Disons, pour faire simple, qu'une fois le code mis plus haut exécuté je voudrais que mon select donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> SELECT * FROM test;
     
    FIELD FIELD FIELD
    ----- ----- -----
    1.1    1.2    1.3 
    2.1    2.2    2.3 
    3.1    3.2    3.3
    J'espère que c'est plus clair à présent

  4. #4
    Invité
    Invité(e)
    Par défaut
    oups j'avais rien compris

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut alors là...
    .. il me semblait bien qu'il y avait trop peu de code que pour faire une erreur dans celui-ci.

    La réponse : CASE !!!!

    Bref si mon clob contient ceci :
    c:='<ROWSET><ROW><FIELD1>1.1</FIELD1><FIELD2>1.2</FIELD2><FIELD3>1.3</FIELD3></ROW><ROW><FIELD1>2.1</FIELD1><FIELD2>2.2</FIELD2><FIELD3>2.3</FIELD3></ROW><ROW><FIELD1>3.1</FIELD1><FIELD2>3.2</FIELD2><FIELD3>3.3</FIELD3></ROW></ROWSET>';

    Et ben j'ai l'effet escompté.

    j'ai honte

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête INSERT mais pas les lignes qui existent
    Par zoom61 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/01/2012, 15h20
  2. Réponses: 3
    Dernier message: 12/01/2012, 17h07
  3. Réponses: 2
    Dernier message: 19/01/2011, 15h41
  4. Réponses: 17
    Dernier message: 11/03/2009, 09h35
  5. Cacher les lignes mais pas la légende
    Par esteban dans le forum BIRT
    Réponses: 1
    Dernier message: 12/08/2008, 11h33

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