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.