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 :

Oracle XML Database [10gR1]


Sujet :

Oracle

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut Oracle XML Database
    Bonjour,

    J'essaye de générer un fichier XML à partir de données dans une base Oracle (10gR1 en local, mais il faut que ça fonctionne pour les versions supérieurs).
    NB : j'utilise le package Oracle XML DB.

    J'ai un souci avec mon select qui me sort une erreur ORA-00905 : mot-clé absent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT XMLSerialize(DOCUMENT
        XMLELEMENT("documentXml", XMLATTRIBUTES('http://www.w3.org/2001/XMLSchema-instance' As "xmlns:xsi"),
            XMLELEMENT ("balise", XMLATTRIBUTES(attribut1 As "attribut1",
                                                attribut2 As "attribut2")
            )
        ).EXTRACT('/') As CLOB
    ) INTO LocCLOB --Insertion du résultat dans la variable CLOB (déclarée plus haut dans mon code)
    FROM table t;
    SQL Developper me situe l'erreur au niveau de l'insertion dans la variable, mais comme ce sont mes débuts en Oracle/XML, je ne vois pas ce qu'il attend!

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Le AS CLOB a l'air mal positionné, ecrivez d'abord votre requête et quand elle fonctionne insérez la dans du PL/SQL

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quand je jouais avec du XML pour Oracle, je trouvais l'appel de XMLRoot plus simple que XMLSerialize, quitte à faire un substr par la suite.

    Essayez comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT substr(XMLRoot(DOCUMENT 
        XMLElement("documentXml", XMLAttributes('http://www.w3.org/2001/XMLSchema-instance' AS "xmlns:xsi"),
            XMLElement ("balise", XMLAttributes(attribut1 AS "attribut1",
                                                attribut2 AS "attribut2")
            )
        ),
        version '1.0" encoding="UTF-8').getClobVal(), 40)
    )
      INTO LocCLOB --Insertion du résultat dans la variable CLOB (déclarée plus haut dans mon code)
      FROM TABLE t;

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Merci Waldar, je me penche un peu sur la question du XMLRoot.

    Par contre quand j'essaye le code que vous m'avez fourni, sqldevelopper me dit qu'il manque une parenthèse à droite. (il y en a une en trop plutôt, mais quand je corrige, l'erreur persiste)

    Et en consultant la doc Oracle, j'aurai finalement plutôt écris ça de cette façon (je me trompe certainement, mais c'est comme ça que je l'ai compris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT substr(XMLRoot(DOCUMENT 
        XMLElement("documentXml", XMLAttributes('http://www.w3.org/2001/XMLSchema-instance' AS "xmlns:xsi"),
            XMLElement ("balise", XMLAttributes(attribut1 AS "attribut1",
                                                attribut2 AS "attribut2")
            )
        ).getClobVal(), 40), version '1.0" encoding="UTF-8')
      INTO LocCLOB --Insertion du résultat dans la variable CLOB (déclarée plus haut dans mon code)
      FROM TABLE t;
    Bon, ça me provoque aussi une erreur : "parenthèse de droite absente"!!
    Je pense qu'il n'identifie pas clairement ce qui cloche!

    EDIT : autant pour moi, j'ai compris la structure, je m'étais emmêlée avec les parenthèses dans la doc. Néanmoins, ça ne fonctionne pas. Le INTO CLOB a l'air de le gêner... Je n'ai pas d'erreur particulière dessus, mais j'ai un doute...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Le INTO est une affectation de résultat uniquement valide en PL/SQL.
    Si c'est pour tester en SQL simple il faut effectivement se passer du INTO.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En fait j'ai un problème avec le document juste après le XMLRoot (je ne l'avais pas vu pendant le copier / coller).
    Je pense qu'il faut le supprimer ou le mettre ailleurs, je ne sais pas exactement ce qu'il représente.

    SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select XMLRoot(XMLElement("documentXml", XMLAttributes('http://www.w3.org/2001/XMLSchema-instance' AS "xmlns:xsi")
                 , XMLElement("balise", XMLAttributes('AT1' AS "attribut1",
                                                      'AT2' AS "attribut2"))), version '1.0" encoding="UTF-8').getClobVal() as xml
      from dual;
     
    XML
    -------------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <documentXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <balise attribut1="AT1" attribut2="AT2"/>
    </documentXml>
    PL/SQL :
    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
    declare
        v$_clob    clob;
     
    begin
        select XMLRoot(XMLElement("documentXml", XMLAttributes('http://www.w3.org/2001/XMLSchema-instance' AS "xmlnsxsi")
                     , XMLElement("balise", XMLAttributes('AT1' AS "attribut1",
                                                          'AT2' AS "attribut2"))), version '1.0" encoding="UTF-8').getClobVal()
          into v$_clob
          from dual;
     
        dbms_output.put_line('Taille : ' || to_char(dbms_lob.getlength(v$_clob)));
     
    end;
    /
     
    Taille : 165

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    Ah oui, le DOCUMENT allait avec le XMLSerialize.
    Et en effet, mon problème venait du fait que je testais en SQL simple avec un INTO. Erreur de novice.

    Merci pour les réponses, j'ai appris plein de choses grâce à vous!

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

Discussions similaires

  1. Accéder depuis J2EE SDK 1.4. à Oracle 9i Database Release 2.
    Par thomas_le_debutant dans le forum Oracle
    Réponses: 5
    Dernier message: 18/03/2006, 11h05
  2. Installation en Mode Silencieux Oracle 9i database
    Par alvine dans le forum Installation
    Réponses: 20
    Dernier message: 20/01/2006, 15h56
  3. [9i] Oracle & XML
    Par ce1200 dans le forum Oracle
    Réponses: 5
    Dernier message: 13/09/2005, 10h36
  4. Réponses: 4
    Dernier message: 25/08/2005, 17h16
  5. oracle / xml
    Par dominique deboise dans le forum Oracle
    Réponses: 6
    Dernier message: 06/01/2005, 14h29

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