Bonjour à toutes et à tous !

Voilà j'ai le problème suivant, j'obtiens les messages d'erreur suivant :
DECLARE
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
ORA-06512: at line 9
ORA-06512: at line 121
Lorsque je lance le script ksh suivant :

Code ksh : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#script SQL
for VARSQL in 3 5 30 900
do
export VARSQL
echo $VARSQL
 
oms_ordres_batch_read.sql $DATEAMJ $VARSQL
 
 
done

pour les valeur 3 5 30 => erreur et pas pour 900

voici le script SQL :
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
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
Pourriez-vous m'éclairer de vos lumieres car je ne vois pas ou est le pb, de plus je débute sur PL/SQL

Je vous remercie par avance

Cordialement Zak75fr