Bonjour à tous,
J'ai un petit soucis concernant un UPDATE et je ne sais pas trop pourquoi.
Suite à une mise à jour de la base, j'ai certaines infos qui n'ont pas étaient rapatriées.
Le code suivant est récupère des status dans 2 tables et les réaffecte dans une 3eme dans le cas où ce status n'existe pas.
J'ai donc 2 curseurs qui font mes select et je fais un update dessus.
Le problème c'est que c'est TRES LONG !
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 DECLARE CURSOR c_update_wo IS SELECT wowo_user_status FROM t_work_order, t_job_request WHERE wowo_code = jrjr_work_order AND jrjr_wo_user_status IS NULL AND wowo_user_status IS NOT NULL; CURSOR c_update_h_wo IS SELECT hwowo_user_status FROM t_h_work_order, t_job_request WHERE hwowo_code = jrjr_work_order AND jrjr_wo_user_status IS NULL AND hwowo_user_status IS NOT NULL; status CHAR; BEGIN OPEN c_update_wo; LOOP FETCH c_update_wo INTO status; EXIT WHEN c_update_wo%NOTFOUND; UPDATE t_job_request SET jrjr_wo_user_status = status; END LOOP; CLOSE c_update_wo; OPEN c_update_h_wo; LOOP FETCH c_update_h_wo INTO status; EXIT WHEN c_update_wo%NOTFOUND; UPDATE t_job_request SET jrjr_wo_user_status = status; END LOOP; CLOSE c_update_h_wo; END;
Les 2 select mettent à peine plus de 1s en tout (pour ~10,000 enregistrements) quand je les exécute séparément, alors que le block Pl/SQL n'en finit pas..
N’étant pas un spécialiste SQL j'aimerai donc comprendre pourquoi cette différence et si cela vient de mon code..
Cdt.
Partager