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 :

[JOINTURE : RELATIONEL / XMLTYPE] - sans XQUERY


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut [JOINTURE : RELATIONEL / XMLTYPE] - sans XQUERY
    Bonsoir !!

    voila ma configuration : Oracle 10GR2
    restriction : ne pas utiliser Xquery

    soit une table T1
    avec 2 champs 'A' NUMBER & 'B' XMLTYPE
    et une table T2
    avec 2 champs VARCHAR2 C & D.

    je souhaiterai faire une jointure entre le champs C et la valeur de B correspondant à ce chemin Xpath '/root/maclef/id'

    une idée sur la syntaxe a utiliser...

    merci d'avance...

  2. #2
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    ... avec un exemple plus concret...

    quand j'essai de faire une jointure via des extract(XPATH) = extract(XPATH) j'obtiens l'erreur suivante :
    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
     
    select
        XMLELEMENT(FIELD,
            XMLAttributes(
                f.LABEL AS "LABEL",
                f.NOM   AS "NOM",
                u.code,
                extractValue(value(aclmode), 'profile_in/text()') AS "MODEACL"
            )
        )
    from 
        tfields f, 
        utilisateurs u,
        table(XMLSequence(extract(CUSTOM_ACL,'/FIELDS/XMLNAME'))) aclmode  
    WHERE    extract(U.CUSTOM_ACL,'/FIELDS/XMLNAME') = extract(F.ACL_DEF,'/FIELDS/XMLNAME')    
    /
    ORA-22950: impossible de classer les objets sans methode MAP ou ORDER
    pourant comme ca ca fonctionne... mais très lent !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select
        u.login, f.nom
    FROM
        utilisateurs u,
        tfields f,
        table(XMLSequence(extract(u.CUSTOM_ACL,'/FIELDS/XMLNAME'))) aclmode1,  
        table(XMLSequence(extract(f.ACL_DEF,'/FIELDS/XMLNAME'))) aclmode2
    WHERE
        extractValue(VALUE(aclmode1),'XMLNAME/@ID') = extractValue(VALUE(aclmode2),'XMLNAME/@ID')
    order by 1    
    ;

  3. #3
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    finalement ca fonctionne.. mais ca doit pas être optimisé (~2sec. pour une table avec 86 rows ... bad )

    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
    select
        XMLELEMENT(FIELD,
            XMLATTRIBUTES(
                f.LABEL AS "LABEL",
                f.NOM   AS "NOM",
                u.code,
                extractValue(VALUE(aclmode1),'XMLNAME/profile_in') AS ACLMODE
            )        
        ) AS FINAL
    FROM
        utilisateurs u,
        tfields f,
        table(XMLSequence(extract(u.CUSTOM_ACL,'/FIELDS/XMLNAME'))) aclmode1,  
        table(XMLSequence(extract(f.ACL_DEF,'/FIELDS/XMLNAME'))) aclmode2
    WHERE
        extractValue(VALUE(aclmode1),'XMLNAME/@ID') = extractValue(VALUE(aclmode2),'XMLNAME/@ID') and
        u.code = '2134357689'
    ;
    sinon ... une qlq a une explication pour l'erreur.. ORA-22950 ; j'ai pas trouver de doc CLAIRE à ce sujet...

    merci.

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

Discussions similaires

  1. [MySQL] Jointure de tables sans produit cartesien
    Par keybon dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2013, 21h30
  2. [2008R2] Jointure de fusion sans résultat
    Par Marshall06 dans le forum SSIS
    Réponses: 2
    Dernier message: 02/12/2011, 12h15
  3. [XSLT 2.0] Jointure intra document sans attribut
    Par Montaigne33 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/05/2011, 09h23
  4. logiciel de Fusion / Jointure de plusieurs requêtes Xquery
    Par Alain_B dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 11/04/2006, 14h29
  5. [sql] afficher deux champs de deux tables sans jointure
    Par Hell dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/06/2005, 12h38

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