Bonjour,

je travaille sous oracle 8 et je dois créer une procédure qui insère le résultat d'une requète effectuée sur plusieurs DB dans une table située dans une autre DB.

Mon soucis est que cela prend un temps énorme.
Ce que je ne comprend pas, c'est que lorsque je ne fait que le select en SQL+, cela ne dure que entre 1.94 sec et 4.56 sec.
Dès qu'il y a le insert into, je passe à 2707.75 sec (en gros: 3/4 d'heure).

voici la requète pour un DB

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 INSERT INTO TMP_SEND_ANTHALYS ( 
 
	SELECT distinct fmr.FAY_SEQ_NO,
			FMR.ref_no,
			fmr.NAME,
			fmr.FIRST_NAME,
			fmr.birth_dat birth_dat,
			fmr.SEX,
			pat.phone_no,
			fmr.gsm_no,
			fmr.handic_perct pourcent_handicap,
			pat.SZE_STT_SEQ_NO stt_seq_no,
			pat.HOUSE_NO,
			pat.BOX,
			stt.mun_name commune,
			stt.postal_code,
			stt.coy_name pays,
			o.seq_no mut_seq_no,
			o.name mutuelle,
			fmr.dor_seq_no,
			decode (substr('D602.WORLD',3,2)
								, '02','Nivelles'
								, '04','Bruxelles'
								, '05','Mons'
								, '06','Lobbes'
								, '08','Mouscron'
								, '09','Liège'
								, '10','Luxembourg'
								, '12','Eupen'
								, '13','Verviers'
								, '15','Namur'
								, '16','Tournai') region,
			'cjb' service,
			max(pat.mod_dat),
			max(pat.cre_dat),
			max(fmr.cre_dat),
			max(fmr.mod_dat)
	FROM patients@D602.WORLD pat,
			fam_membs@D602.WORLD fmr,
			org_membs@D602.WORLD omr,
			orgs@D602.WORLD o,
			streets_v@D602.WORLD stt
	WHERE pat.fmr_fay_seq_no=fmr.fay_seq_no
			and pat.fmr_ref_no=fmr.ref_no
			and omr.fmr_fay_seq_no=fmr.fay_seq_no
			and omr.fmr_ref_no=fmr.ref_no
			and omr.ogn_seq_no = o.seq_no
			and pat.sze_stt_seq_no =stt.stt_seq_no
			and stt.lang_code = 0
			and nvl(omr.end_dat,sysdate+1)> sysdate
			and ( to_char(pat.mod_dat,'dd-mm-yyyy') = to_char(sysdate,'dd-mm-yyyy') 
					or 
				  to_char(fmr.mod_dat,'dd-mm-yyyy') = to_char(sysdate,'dd-mm-yyyy')
					or
				  to_char(pat.cre_dat,'dd-mm-yyyy') = to_char(sysdate,'dd-mm-yyyy') 
					or 
				  to_char(fmr.cre_dat,'dd-mm-yyyy') = to_char(sysdate,'dd-mm-yyyy')
				) GROUP BY fmr.FAY_SEQ_NO,
				FMR.ref_no,
				fmr.NAME,
				fmr.FIRST_NAME,
				fmr.birth_dat,
				fmr.SEX,
				pat.phone_no,
				fmr.gsm_no,
				fmr.handic_perct,
				pat.SZE_STT_SEQ_NO,
				pat.HOUSE_NO,
				pat.BOX,
				stt.mun_name,
				stt.postal_code,
				stt.coy_name,
				o.seq_no,
				o.name,
				fmr.dor_seq_no,
				decode (substr('D602.WORLD',3,2)
								, '02','Nivelles'
								, '04','Bruxelles'
								, '05','Mons'
								, '06','Lobbes'
								, '08','Mouscron'
								, '09','Liège'
								, '10','Luxembourg'
								, '12','Eupen'
								, '13','Verviers'
								, '15','Namur'
								, '16','Tournai'),
				'CJB'
 
                                    )
Toute suggestion est la bien venue puisque cette procédure doit tourner quotidiennement