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 : 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  |
+----+-----+
Je souhaite que dans A, Val devienne Val de A + Val de B.

Sous Sybase, cette syntaxe EST autorisée :

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
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 : 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)
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'