[Oracle SQL toutes versions] UPDATE massif
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 :
Code:
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 |
+----+-----+ |
Je souhaite que dans A, Val devienne Val de A + Val de B.
Sous Sybase, cette syntaxe EST autorisée :
Code:
1 2 3 4 5
|
UPDATE A
SET val = A.val + B.val
FROM A, B
WHERE A.Id = B.Id |
Sous Oracle, cette syntaxe est interdite (ce qui est bien dommage, car elle permet de n'ouvrir qu'un seul curseur....).
Si j'ai bien compris, sous Oracle, je dois donc faire ainsi :
Code:
1 2 3
|
UPDATE A
SET val = val + (SELECT B.val FROM B WHERE B.Id = A.Id) |
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....
Toute suggestion est la bienvenue...
Merci d'avance.
Nico'