Bonjour,
Comment faire un UPDATE massif optimisé (donc le plus rapidement possible) sous Oracle?
Prenons un cas d'école :
J'ai deux tables A et B qui contiennent ces données :
Je souhaite que dans A, Val devienne Val de A + Val de B.
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 A +----+-----+ | Id | Val | +----+-----+ | 1 | 50 | | 2 | 60 | | 3 | 10 | | 4 | 20 | +----+-----+ B +----+-----+ | Id | Val | +----+-----+ | 1 | 70 | | 2 | 10 | | 3 | 60 | | 4 | 40 | +----+-----+
Sous Sybase, cette syntaxe EST autorisée :
Sous Oracle, cette syntaxe est interdite (ce qui est bien dommage, car elle permet de n'ouvrir qu'un seul curseur....).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 UPDATE A SET val = A.val + B.val FROM A, B WHERE A.Id = B.Id
Si j'ai bien compris, sous Oracle, je dois donc faire ainsi :
Ici, on se rend bien compte que Oracle va ouvrir un curseur sur B pour chaque row de A.... Pour des petites tables, aucune incidence, mais je suis intimement convaincu que si les tables A et B sont grosses, Oracle mettre beaucoup plus de temps à exécuter la requête que Sybase....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UPDATE A SET val = val + (SELECT B.val FROM B WHERE B.Id = A.Id)
Toute suggestion est la bienvenue...
Merci d'avance.
Nico'
Partager