Bonjour,

J'ai un petit souci avec ma procédure, j'essaie d'inserer des données dans ma nouvelle table deltasid_test et selectionnant les données dans les tables v$session, v$ssestat et v$statname, cependant j'ai une boucle infinis des sessions, pourriez vous essayez de voir ma synthaxes s'il vous plait, j'ai surement du placer un bout de code au mauvais endroit . mon code :

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
create or replace Type tab_delta1 As Varray(48) Of number;
/
create or replace Type tab_delta2 As Varray(48) Of number;
/
create or replace Type tab_delta3 As Varray(48) Of number;
/
create or replace Type tab_delta4 As Varray(48) Of number;
/
create or replace Type tab_delta5 As Varray(48) Of number;
/
create or replace Type tab_delta6 As Varray(48) Of number;
/
create or replace Type tab_delta7 As Varray(48) Of number;
/
create or replace Type tab_delta8 As Varray(48) Of number;
/
create or replace Type tab_delta9 As Varray(48) Of number;
/
create or replace Type tab_delta10 As Varray(48) Of number;
/
create or replace TYPE type_varray_date is VARRAY(48) of date;
/
drop type type_varray force;
 
CREATE TABLE deltasid_test (
id_delta INTEGER,
delta_idx1 varchar2(20),
delta_idx2 varchar2(40),
statistique_type varchar2(100),
start_date date,
refresh_date date,
specification tabSpecification,
delta_1 tab_delta1,
delta_2 tab_delta2,
delta_3 tab_delta3,
delta_4 tab_delta4,
delta_5 tab_delta5,
delta_6 tab_delta6,
delta_7 tab_delta7,
delta_8 tab_delta8,
delta_9 tab_delta9,
delta_10 tab_delta10
 
);
 
--drop table deltasid_test;
 
 
create or replace procedure toto as
 
V_tab_delta1 tab_delta1 := tab_delta1(); --initialise
V_tab_delta2 tab_delta2 := tab_delta2();
V_tab_delta3 tab_delta3 := tab_delta3();
V_tab_delta4 tab_delta4 := tab_delta4();
V_tab_delta5 tab_delta5 := tab_delta5();
V_tab_delta6 tab_delta6 := tab_delta6();
V_tab_delta7 tab_delta7 := tab_delta7();
V_tab_delta8 tab_delta8 := tab_delta8();
V_tab_delta9 tab_delta9 := tab_delta9();
V_tab_delta10 tab_delta10 := tab_delta10();
 
 
 
v_tab_Specification tabSpecification := tabSpecification(); --initialise
 
 
 
 
ln_serial number;
ln_delta_idx1 number;
lv_delta_idx2 varchar2(20);
lv_statistique_type varchar2(100);
ld_start_date date;
ln_delta1 number;
lv_username varchar2(30);
lv_machine varchar2(64);
lv_type varchar2(10);
lln_schemaname varchar2(64);
lv_osuser varchar2(64);
lv_program varchar2(64);
lv_service_name varchar2(64);
ln_schema number;
ln_sql_hash_value number;
ln_prev_hash_value number;
ln_module_hash number;
ln_action_hash number;
ln_fixed_table_sequence number;
 
ld_Date date;
 
-- Déclaration du curseur
CURSOR C_STAT IS
Select se.serial#, to_char(se.SID, '9999') as sid, to_char(se.logon_time, 'DD/MM/YYYY HH24:MI:SS') as logon_time, st.name, si.startup_time, se.username, se.machine, se.type, se.schemaname, se.osuser, se.program, se.service_name, ss.value, se.schema#, se.SQL_HASH_VALUE, se.PREV_HASH_VALUE, se.MODULE_HASH, se.ACTION_HASH, se.FIXED_TABLE_SEQUENCE
FROM v$session se
INNER JOIN v$sesstat ss
ON ss.SID = se.SID 
INNER JOIN v$statname st
ON st.statistic# = ss.statistic# 
INNER JOIN v$instance si 
ON si.con_id = st.con_id;
--WHERE st.statistic# = 19;
 
 
CURSOR C_delta IS
select id_delta from deltasid_test;
 
ll_sid_previous number;
 
LastNumber number;
LastNumber2 number;
LastNumber3 number;
LastNumber4 number;
LastNumber5 number;
LastNumber6 number;
LastNumber7 number;
LastNumber8 number;
LastNumber9 number;
LastNumber10 number;
LastSpecification varchar2(10000);
 
ln_count number;
 
 
Begin
OPEN C_STAT;
LOOP
FETCH C_STAT INTO ln_serial, ln_delta_idx1, lv_delta_idx2, lv_statistique_type, ld_start_date, lv_username, lv_machine, lv_type, lln_schemaname, lv_osuser, lv_program, lv_service_name, ln_delta1, ln_schema, ln_sql_hash_value, ln_prev_hash_value, ln_module_hash, ln_action_hash, ln_fixed_table_sequence; 
EXIT WHEN C_STAT%NOTFOUND;
 
 
 
SELECT COUNT(*)
INTO ln_count
FROM deltasid_test
WHERE delta_idx1 = ln_delta_idx1 
AND delta_idx2 = lv_delta_idx2
AND lv_statistique_type = 'Session'; 
 
 
 
LastNumber := V_tab_delta1.COUNT+1;
LastNumber2 := V_tab_delta2.COUNT+1;
LastNumber3 := V_tab_delta3.COUNT+1;
LastNumber4 := V_tab_delta4.COUNT+1;
LastNumber5 := V_tab_delta5.COUNT+1;
LastNumber6 := V_tab_delta6.COUNT+1;
LastNumber7 := V_tab_delta7.COUNT+1;
LastNumber8 := V_tab_delta8.COUNT+1;
LastNumber9 := V_tab_delta9.COUNT+1;
LastNumber10 := V_tab_delta10.COUNT+1;
 
LastSpecification := v_tab_Specification.COUNT+1;
 
if ln_count = 0 THEN 
 
if LastNumber<=V_tab_delta1.LIMIT THEN
 
V_tab_delta1.extend;
V_tab_delta1(LastNumber) := ln_delta1;
 
END IF;	
if LastNumber4<=V_tab_delta4.LIMIT THEN
 
V_tab_delta4.extend;
V_tab_delta4(LastNumber4) := 0;
 
END IF;
 
if LastNumber5<=V_tab_delta5.LIMIT THEN
 
V_tab_delta5.extend;
V_tab_delta5(LastNumber5) := 0;
 
END IF;
 
if LastNumber6<=V_tab_delta6.LIMIT THEN
 
V_tab_delta6.extend;
V_tab_delta6(LastNumber6) := 0;
 
END IF;
 
if LastNumber7<=V_tab_delta7.LIMIT THEN
 
V_tab_delta7.extend;
V_tab_delta7(LastNumber7) := 0;
 
END IF;
 
if LastNumber8<=V_tab_delta8.LIMIT THEN
 
V_tab_delta8.extend;
V_tab_delta8(LastNumber8) := 0;
 
END IF;
 
if LastNumber9<=V_tab_delta9.LIMIT THEN
 
V_tab_delta9.extend;
V_tab_delta9(LastNumber9) := 0;
 
END IF;
 
if LastNumber10<=V_tab_delta10.LIMIT THEN
 
V_tab_delta10.extend;
V_tab_delta10(LastNumber10) := 0;
 
END IF;
 
if LastNumber2<=V_tab_delta2.LIMIT THEN
V_tab_delta2.extend(4);
V_tab_delta2(LastNumber2+1) := ln_schema;
V_tab_delta2(LastNumber2+2) := ln_sql_hash_value;
V_tab_delta2(LastNumber2+3) := ln_prev_hash_value;
END IF;	 
 
if LastNumber3<=V_tab_delta3.LIMIT THEN
V_tab_delta3.extend(4);
V_tab_delta3(LastNumber3+1) := ln_module_hash;
V_tab_delta3(LastNumber3+2) := ln_action_hash;
V_tab_delta3(LastNumber3+3) := ln_fixed_table_sequence;
END IF;
 
v_tab_Specification.extend(8);
v_tab_Specification(LastSpecification+1) := lv_username;
v_tab_Specification(LastSpecification+2) := lv_machine;
v_tab_Specification(LastSpecification+3) := lv_type;
v_tab_Specification(LastSpecification+4) := lln_schemaname;
v_tab_Specification(LastSpecification+5) := lv_osuser;
v_tab_Specification(LastSpecification+6) := lv_program;
v_tab_Specification(LastSpecification+7) := lv_service_name;
 
 
insert
into deltasid_test ( id_delta, delta_idx1, delta_idx2, statistique_type, start_date, refresh_date, specification, delta_1, delta_2, delta_3, delta_4, delta_5, delta_6, delta_7, delta_8, delta_9, delta_10 )
values ( ln_serial, ln_delta_idx1, lv_delta_idx2, 'Session', ld_start_date, sysdate, v_tab_Specification, V_tab_delta1, V_tab_delta2, V_tab_delta3, V_tab_delta4, V_tab_delta5, V_tab_delta6, V_tab_delta7, V_tab_delta8, V_tab_delta9, V_tab_delta10);
 
V_tab_delta1 := tab_delta1(); --Initialisation
V_tab_delta2 := tab_delta2(); 
V_tab_delta3 := tab_delta3(); 
V_tab_delta4 := tab_delta4(); 
V_tab_delta5 := tab_delta5(); 
V_tab_delta6 := tab_delta6(); 
V_tab_delta7 := tab_delta7(); 
V_tab_delta8 := tab_delta8(); 
V_tab_delta9 := tab_delta9(); 
V_tab_delta10 := tab_delta10(); 
v_tab_Specification :=tabSpecification();
else 
 
UPDATE deltasid_test
SET refresh_date = sysdate 
WHERE id_delta = ln_serial; 
 
END IF;
 
ll_sid_previous := ln_delta_idx1;
 
END LOOP;
if LastNumber2<=V_tab_delta2.LIMIT THEN
V_tab_delta2.extend(4);
V_tab_delta2(LastNumber2+1) := ln_schema;
V_tab_delta2(LastNumber2+2) := ln_sql_hash_value;
V_tab_delta2(LastNumber2+3) := ln_prev_hash_value;
END IF;	 
 
if LastNumber3<=V_tab_delta3.LIMIT THEN
V_tab_delta3.extend(4);
V_tab_delta3(LastNumber3+1) := ln_module_hash;
V_tab_delta3(LastNumber3+2) := ln_action_hash;
V_tab_delta3(LastNumber3+3) := ln_fixed_table_sequence;
END IF;
 
 
v_tab_Specification.extend(8);
v_tab_Specification(LastSpecification+1) := lv_username;
v_tab_Specification(LastSpecification+2) := lv_machine;
v_tab_Specification(LastSpecification+3) := lv_type;
v_tab_Specification(LastSpecification+4) := lln_schemaname;
v_tab_Specification(LastSpecification+5) := lv_osuser;
v_tab_Specification(LastSpecification+6) := lv_program;
v_tab_Specification(LastSpecification+7) := lv_service_name;
 
 
insert
into deltasid_test ( id_delta, delta_idx1, delta_idx2, statistique_type, start_date, refresh_date, specification, delta_1, delta_2, delta_3, delta_4, delta_5, delta_6, delta_7, delta_8, delta_9, delta_10 )
values ( ln_serial, ln_delta_idx1, lv_delta_idx2, 'Session', ld_start_date, sysdate, v_tab_Specification, V_tab_delta1, V_tab_delta2, V_tab_delta3, V_tab_delta4, V_tab_delta5, V_tab_delta6, V_tab_delta7, V_tab_delta8, V_tab_delta9, V_tab_delta10);
 
CLOSE C_STAT;
commit;
End;
/
 
execute oui1; --Commande executé