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.







Répondre avec citation



N'oubliez pas le bouton
et pensez aux balises [code]






Partager