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 :
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.
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'
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 :
Dans mon cas j'aimerais savoir s'il est possible de faire la même chose en XQuery.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Select monChamp from maTable where monChamp2 IN (Select ...)
Partager