Bonjour,
je cherche une âme généreuse pour m'éviter d'utiliser un curseur si cela est possible.....
J'ai une liste chainée d'éléments (des dossiers)
sur chaque dossier je peux avoir autant de "données" que je le souhaite
Une donnée peut être propagée dans une liste chainée: on précise alors le dossier d'origine et la génération de la donnée: nombre partant de 0 et incrémenté de 1 a chaque propagation
Exemple:
Ensuite, la donnée est propagée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DOS1 ---- DOS2 ---- DOS3 ---- DOS4 | DAT1 O:DOS1 G:0
On peut évidemment avoir autant de données d'origines différentes qui souhaité:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DOS1 ---- DOS2 ---- DOS3 ---- DOS4 | | | | DAT1 DAT1 DAT1 DAT1 O:DOS1 O:DOS1 O:DOS1 O:DOS1 G:0 G:1 G:2 G:3
J'ai ensuite une procédure qui me permet de supprimer un lien (par exemple entre DOS2 et DOS3) et je devrais donc supprimer les données propagées à partir de DOS2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 DOS1 ---- DOS2 ---- DOS3 ---- DOS4 | | | | DAT1 DAT1 DAT1 DAT1 O:DOS1 O:DOS1 O:DOS1 O:DOS1 G:0 G:1 G:2 G:3 DAT2 DAT2 DAT2 DAT2 O:DOS8 O:DOS8 O:DOS8 O:DOS8 G:4 G:5 G:6 G:7 DAT3 DAT3 DAT3 O:DOS2 O:DOS2 O:DOS2 G:0 G:1 G:2
Mon problème est que je n'arrive pas a faire la requête me permettant de faire cela... Il reste la solution du curseur mais je pense qu'il est possible d'éviter
Note: les liens entre les données et les dossiers sont fait avec une table
DOS_DAT
Si je veux supprimer le lien DOS2-DOS3
la requête de suppression des données serait du style
Mais la les données ORIGINE et GENERATION sont disjointes, et je ne sais pas comment faire pour dire que pour chaque donnée du dossier DOS2, il faut supprimer les données de DATA qui ont pour origine celle de la donnée du dossier 2 et une génération supérieure à celle de la donnée du dossier 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DELETE FROM DATA WHERE ORIGINE = (SELECT ORIGINE FROM DATA WHERE DOS_DAT.DOS = DOS2) AND GENERATION > (SELECT ORIGINE FROM DATA WHERE DOS_DAT.DOS = DOS2)
Ouf !![]()
Partager