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
| set serveroutput on size 100000
set verify off
set lines 300
set feedback off
set term off
clear screen
spool /home/oms4v0/data/oms_compteurs_result_tempo_&1._&2..dat
DECLARE
TYPE type_tab_rif IS TABLE OF char(5) INDEX BY BINARY_INTEGER ;
tab_rif type_tab_rif ;
------------------------------------------
CURSOR c_compteurs ( lk_date VARCHAR2 , lk_rifcpte VARCHAR2 ) IS
select -- on calcule le signe de la soustraction de 15 min à la difference entre l'heure de saisie et l'heure d'acquit
count(*) NBINS,
SIGN( ((A.DCRE - I.DSAIINS) * 86400) - &2 ) SIGN15
from
OMSINSTRUCTION.INSDATA I ,
OMSINSTRUCTION.INSHISSTATINS A
where
I.CRSECOMNCNG like 'LIFO%'
and
I.DJBRSCHAR = lk_date
and
I.RIFCPTE = lk_rifcpte
and
I.RINS = A.RINS
and
to_char(A.DCRE,'YYYYMMDDHH24MI') > lk_date||'0915'
and
to_char(A.DCRE,'YYYYMMDDHH24MI') < lk_date||'1745'
and
A.CCYVIE='DIFFU' and A.CSTINS = 'ACQ_M'
group by
SIGN( ((A.DCRE - I.DSAIINS) * 86400) - 900 )
union
select -- on ajoute les ordres acquittés avant 9h15
count(*) NBINS,
-1 SIGN15
from
OMSINSTRUCTION.INSDATA I ,
OMSINSTRUCTION.INSHISSTATINS A
where
I.CRSECOMNCNG like 'LIFO%'
and
I.DJBRSCHAR = lk_date
and
I.RIFCPTE = lk_rifcpte
and
I.RINS = A.RINS
and
to_char(A.DCRE,'YYYYMMDDHH24MI') <= lk_date||'0915'
and
A.CCYVIE='DIFFU' and A.CSTINS = 'ACQ_M'
group by
-1 ;
------------------------------------------
CURSOR c_compteurs_allif ( lk_date VARCHAR2) IS
select -- on calcule le signe de la soustraction de 3 5 30 900 secondes à la difference entre l'heure de saisie et l'heure d'acquit
count(*) NBINS,
SIGN( ((A.DCRE - I.DSAIINS) * 86400) - &2 ) SIGN15
from
OMSINSTRUCTION.INSDATA I ,
OMSINSTRUCTION.INSHISSTATINS A
where
I.CRSECOMNCNG like 'LIFO%'
and
I.DJBRSCHAR = lk_date
and
I.RINS = A.RINS
and
to_char(A.DCRE,'YYYYMMDDHH24MI') > lk_date||'0915'
and
to_char(A.DCRE,'YYYYMMDDHH24MI') < lk_date||'1745'
and
A.CCYVIE='DIFFU' and A.CSTINS = 'ACQ_M'
group by
SIGN( ((A.DCRE - I.DSAIINS) * 86400) - &2 )
union
select -- on ajoute les ordres acquittés avant 9h15
count(*) NBINS,
-1 SIGN15
from
OMSINSTRUCTION.INSDATA I ,
OMSINSTRUCTION.INSHISSTATINS A
where
I.CRSECOMNCNG like 'LIFO%'
and
I.DJBRSCHAR = lk_date
and
I.RINS = A.RINS
and
to_char(A.DCRE,'YYYYMMDDHH24MI') <= lk_date||'0915'
and
A.CCYVIE='DIFFU' and A.CSTINS = 'ACQ_M'
group by
-1 ;
------------------------------------------
compteur_total number ;
compteur_inf number ;
compteur_sup number ;
fetch_count number ;
fetch_signe number ;
BEGIN
tab_rif(1) := '00005';
tab_rif(2) := '00001';
tab_rif(3) := '00029';
tab_rif(4) := '00009';
tab_rif(5) := '00031';
tab_rif(6) := '00030';
tab_rif(7) := '00010';
tab_rif(8) := '00032';
FOR compteur IN tab_rif.first .. tab_rif.last
LOOP
compteur_total := 0 ;
compteur_inf := 0 ;
compteur_sup := 0 ;
OPEN c_compteurs ( &1 , tab_rif(compteur) ) ;
FETCH c_compteurs INTO fetch_count , fetch_signe ;
WHILE c_compteurs%FOUND
LOOP
IF ( fetch_signe > 0 ) THEN
compteur_sup := compteur_sup + fetch_count ;
compteur_total := compteur_total + fetch_count ;
ELSE
compteur_inf := compteur_inf + fetch_count ;
compteur_total := compteur_total + fetch_count ;
END IF ;
FETCH c_compteurs INTO fetch_count , fetch_signe ;
END LOOP;
CLOSE c_compteurs ;
-- tous les compteurs sont dans le fichier spool, precedé du RIF, il ne restera qu'a trier
DBMS_OUTPUT.PUT_LINE( tab_rif(compteur)||' le nombre d''acquittements total est '||compteur_total );
DBMS_OUTPUT.PUT_LINE( tab_rif(compteur)||' le nombre d''acquittements > a &2. Secondes ---> '||compteur_sup );
DBMS_OUTPUT.PUT_LINE( tab_rif(compteur)||' le nombre d''acquittements < a &2. Secondes ---> '||compteur_inf );
END LOOP;
compteur_total := 0 ;
compteur_inf := 0 ;
compteur_sup := 0 ;
OPEN c_compteurs_allif ( &1 ) ;
FETCH c_compteurs_allif INTO fetch_count , fetch_signe ;
WHILE c_compteurs_allif%FOUND
LOOP
IF ( fetch_signe > 0 ) THEN
compteur_sup := compteur_sup + fetch_count ;
compteur_total := compteur_total + fetch_count ;
ELSE
compteur_inf := compteur_inf + fetch_count ;
compteur_total := compteur_total + fetch_count ;
END IF ;
FETCH c_compteurs_allif INTO fetch_count , fetch_signe ;
END LOOP;
CLOSE c_compteurs_allif ;
DBMS_OUTPUT.PUT_LINE( 'ALLIF le nombre d''acquittements total est '||compteur_total );
DBMS_OUTPUT.PUT_LINE( 'ALLIF le nombre d''acquittements > a &2. Secondes ---> '||compteur_sup );
DBMS_OUTPUT.PUT_LINE( 'ALLIF le nombre d''acquittements < a &2. Secondes ---> '||compteur_inf );
END;
/
spool off
quit |
Partager