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

XQUERY/SGBD XML Discussion :

[XQUERY] Limiter une requête update aux enregistrements dont l'id est contenu dans un tableau


Sujet :

XQUERY/SGBD XML

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut [XQUERY] Limiter une requête update aux enregistrements dont l'id est contenu dans un tableau
    Bonjour,

    je travaille avec une base de données hierarchique (architecture XML). Mes requêtes sont générées en java (jdk 1.4.2).

    Je cherche à mettre à jour des enregistrements dont je connais les identifiants (xmlDBId ici), ces-derniers sont stockés dans un tableau.
    J'aimerais générer une requête qui n'effectue la mise à jour que pour les identifants du-dit tableau.

    J'ai déjà envisagé plusieurs solutions, pouvez-vous m'aider à trouver la meilleure ?

    Solution numéro 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // je récupère mes enregistrements
    Defaut[] defauts = getDefautsXXX(oldXXX, oldYYY);
    // pour chaque défaut récupéré, j'extrait l'xmlDBId que je place dans xmlDBId
    String[] xmlDBIds = new String[defauts.length];
    for (int i=0; i<defauts.length; i++) {
    	xmlDBIds[i] = defauts[i].getXmlDBId();
    }
     
    // la requête que je souhaite réalisée est du type update comme ci-dessous :
    update replace input()/defaut[ficheDefaut/@xmlDBId]/ficheDefaut/groupe/text() with 'ZZZ'
    Ce que j'aimerais c'est remplacer 'ZZZ' par un champ du tableau xmlDBId et que la valeur de xmlDBId change autant de fois qu'il y a de postes dans le tableau. Ainsi si mon tableau (xmlDBId) contient 3 xmlDBId, j'aimerais que ma requête s'applique aux enregistrement dont le xmlDBId est égal à un des xmlDBId enregistrés dans le tableau.

    Pour vous aider à comprendre mon problème :
    - une solution possible serait de réaliser autant de requêtes qu'il y a de champ dans le tableau xmlDBId, avec pour chacune d'elles un ZZZ égal à une xmlDBId différente. Inconviénient : Trop de requêtes ! Trop lent !

    - il existe en SQL l'instruction IN qui permet de désigner un ensemble de valeurs pour lesquelles l'action doit être réalisée. Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select monChamp from maTable where monChamp2 IN (Select ...)
    Dans mon cas j'aimerais savoir s'il est possible de faire la même chose en XQuery.

  2. #2
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 52
    Points
    52
    Par défaut
    C'est bon j'ai trouvé une solution qui contourne le problème.
    Pour indication voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    update
    for $def in input()/defaut[ficheXXX/groupe/@code = 'ZZZ' and ficheXXX/typeYYY = 'AAA']
    do (
       replace $def/ficheXXX/groupe/text() with "EEE"
       replace $def/ficheXXX/groupe/@code with attribute code{"EEE"}
    )
    Au passage notez comment passer plusieurs ordres replace au sein d'une même requête.

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

Discussions similaires

  1. somme des cellules dont l'adresse est contenue dans un tableau?
    Par mazuno dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/06/2010, 13h15
  2. Réponses: 3
    Dernier message: 07/01/2010, 16h54
  3. Instancier une classe dont le nom est contenu dans une String
    Par fyque dans le forum Général Python
    Réponses: 15
    Dernier message: 13/06/2008, 12h33
  4. Réponses: 7
    Dernier message: 25/10/2005, 15h19
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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