Sur une table LSTOBJBLD, il ya un champ appelé ORDRE qui est alimenté par un écran où les utilisateurs peuvent saisir une valeur numérique qui va servir à ordonner le nouvel enregistrement par rapport aux autres. Mais quand l’utilisateur va valider sa saisi je souhaite que le champ en question soit ré-incrémenter de 10 en 10, comme ce qu’il se passe avec EDTLIBLE quand on ajout une bibliothèque.
L’utilisateur crée test 2 et ordre = 11 :
Test1 | 10 |
Test2 | 11 |
Test3 | 20 |
Après validation, nous avons :
Test1 | 10 |
Test2 | 20 |
Test3 | 30 |
J’ai utilisé cette méthode :
SEQUENCE permet de créer un champ (genre DTARAA) dont on défini des propriétés d’incrémentation.
EXEC SQL
DROP SEQUENCE order_seq;
EXEC SQL
CREATE SEQUENCE order_seq
START WITH 10
INCREMENT BY 10
MAXVALUE 9990
CYCLE
CACHE 24;
EXEC SQL
CLOSE list_obj_projet;
// positionnement en début de fichier
EXEC SQL
DECLARE list_obj_projet CURSOR FOR
SELECT projet,
ordre
FROM list_objet_build
WHERE projet = :p_projet
ORDER BY ordre,
RRN(list_objet_build) ;
EXEC SQL
OPEN list_obj_projet;
EXEC SQL
FETCH list_obj_projet INTO :l_projet, :l_ordre;
Dow sqlcode=0;
EXEC SQL
UPDATE list_objet_build
SET ordre = NEXT VALUE FOR order_seq
WHERE CURRENT OF list_obj_projet;
EXEC SQL
FETCH list_obj_projet INTO :l_projet, :l_ordre;
EndDo;
Insère une sélection de tes enregistrements triés selon l’ordre dans une table temporaire.
Sur cette dernière, tu auras spécifié un champ incrémenté automatiquement de 10 en 10.
La table d’origine peut être mise à jour avec les nouvelles valeurs.