Bonjour à tous,
J'ai toute une série de donnée à supprimer de ma base, après avoir copié ces données dans des tables d'archives.
Dans le cas de clés étrangères j'ai ceci :
Tables A -> B -> C
Je dois donc faire 6 requêtes (je n'ai pas vérifié la syntaxe, c'est un détail pour le moment) :
Alors il y a plusieurs solutions qui s'offrent à moi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 INSERT INTO TC_ARCH VALUES ( SELECT * FROM TC WHERE B_ID IN ( SELECT B_ID FROM TA WHERE A_ID IN ( SELECT ID FROM TA WHERE ( // Conditions de suppression de A ) ) ) ); INSERT INTO TB_ARCH VALUES ( SELECT * FROM TB WHERE B_ID IN ( SELECT B_ID FROM TA WHERE A_ID IN ( // Conditions de suppression de A ) ) ); INSERT INTO TA_ARCH VALUES ( SELECT * FROM TA WHERE B_ID IN ( // Conditions de suppression de A ) ); // Puis pareil pour les DELETES
- Faire comme ci dessus mais ça va vite devenir invivable étant donnée que la base est grosse et que les dépendances peuvent s'étaler sur 6-7 tables
- Faire des tables temporaires pour "poser" dans un premier temps ce qui doit être supprimé et ensuite effectuer les traitements via des requêtes simples
- Faire des curseurs imbriquer où le premier parcourra TA, dans le parcours en créer un second qui parcourra TB puis toujours imbriqué un qui parcourra TC
La première solution et difficilement maintenable
La second me semble déjà plus correcte
La troisième me semble peu performante
Laquelle faut-il utiliser pour effectuer ce genre de traitement ?
Peut-être y a-t-il d'autres solutions ?
Pour info la base est Oracle 10 mais je ne pense pas que cela ai d'importance pour décider de comment s'y prendre ici.
Merci à vous,
A bientôt
Partager