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.

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;
Le problème c'est que c'est TRES LONG !

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.