[Oracle 9i]

Bonjour,

Voici les ordres et les libellés de la table QUESTIONS:

1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I

Je désir mettre en place une fonctionnalité permettant de déplacer un bloque de question. C'est à dire que l'utilisateur indique la borne de début, la borne de fin et la question précédente.
Par exemple, pour les paramètres suivants:
Borne de début: E
Borne de fin : G
Question précédente : B
On doit obtenir le résultat suivant:

1 A
2 B
3 E
4 F
5 G
6 C
7 D
8 H
9 I

Je suis parti en me disant que je devrai faire la mise à jour des ordres en 2 temps:
1. Mise à jour des ordres des questions qui se touvent entre la question précédente et la borne de début:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
UPDATE QUESTIONS
SET ordre = ordre + vl_blocksize
WHERE (ordre > vl_ordrequestprec)
AND (ordre < vl_ordrebornedeb);
2. Mise à jour des ordres des questions qui se trouvent dans le bloque:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
UPDATE QUESTIONS
SET ordre = ordre + vl_intervalsize
WHERE (ordre >= vl_ordrebornedeb)
AND (ordre <= vl_ordrebornefin);
Remarques:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
/*
vl_blocksize: Nb d'éléments qui se trouvent dans le blque de question à déplacer (dans l'ex. 3).
vl_ordrequestprec: Ordre de la question précédente (dans l'ex. 2).
vl_ordrebornedeb : Ordre de 1ere question du bloque (dans l'ex 5).
vl_ordrebornefin : Ordre de dernière question du bloque (dans l'ex 7).
*/
Cette méthode ne fonctionne pas car une fois mon permier update executé, j'ai plusieurs fois le même ordre:
1 A
2 B
6 C
7 D

5 E
6 F
7 G

8 H
9 I
Ensuite, dans mon exemple, mon deuxième update met également à jour les ordres des questions C et D et ce n'est pas ce qui est voulu ! bref, pour notre exemple, nous arrivons au resultat final suivant:
1 A
2 B
3 E
4 C
4 F
5 D
5 G
8 H
9 I
Zut!

Est-ce que quelqu'un peut me dire comment éviter que les enregistrement mis à jour lors du 1er update ne soient pas mis à jour dans le 2ème?
Moi je verrai éventuellement l'ajout d'une colonne "jeton" dans ma table QUESTIONS. Lors du 1er update je metterai le jeton à "vrai" et dans le 2ème, je ne metterai pas à jour les enregistrements dont le jeton est à "vrai".
Voyez-vous une autre solution?
Merci du coup de main.