Bonjour à tous
je suis nouveau et je metrise pas PL/SQL j'ai crée une procedure mais ça me renvoi une erreur que je ne sais pas comment geger.

voici le script et l'erreur

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
CREATE OR REPLACE
PROCEDURE VERIFICATION_ANNÉE AS
res number :=0;
  nomfic varchar2(80);
  req_count varchar2(4000);  
  file_id utl_file.file_type;
  nb_ligne1 date;         
  nb_ligne2 number(38);               
 
BEGIN        
 
 
        select 'ANNEE_VF_' || to_char(sysdate,'YYMMDDHH24MISS') || '.log' into nomfic from dual;
 
        file_id := FILE_OPEN1(nomfic, 0);
 
        For cur2 in (select distinct table_name , column_name from  USER_TAB_COLUMNS where (column_name like '%MAJ' AND table_name like 'SDNQTW%') OR (column_name like '%MAJ' AND table_name like 'SDNQTD%'))
 
        loop
          if cur2.column_name is not null then
              res  := WRITE_FILE(file_id, ' Table '|| cur2.table_name ||'  ');  
              res  := WRITE_FILE(file_id, '');
              res     := WRITE_FILE(file_id, ' Champ date concerné  ' || cur2.column_name||' : '); 
           --   res     := WRITE_FILE(file_id, ' ');
              req_count := 'select distinct('||cur2.column_name ||'), count(*)   over (partition by '||cur2.column_name ||') from '||cur2.table_name||' where (EXTRACT(YEAR FROM '||cur2.column_name ||') = EXTRACT(YEAR FROM sysdate)) order by '||cur2.column_name ||' desc ';
              dbms_output.put_line(substr(req_count,1,250));
              execute immediate req_count into  nb_ligne1, nb_ligne2;
 
                res  := WRITE_FILE(file_id, ' Le nombre d enregistrement  est:  '|| nb_ligne2  );
                res  := WRITE_FILE(file_id, ' la date  d enregistrement est: '||nb_ligne1 );
                res  := WRITE_FILE(file_id, '');
 
           end if;                   
 
              if nb_ligne2 <>0 then           
                res := WRITE_FILE(file_id, 'Pas de probleme signalé');
                res := WRITE_FILE(file_id, '');
 
             else 
 
                  res := WRITE_FILE(file_id, '---------------------------------------------------------------------------------------------------------------------------------------------------');
                  res := WRITE_FILE( file_id, 'I PROBLEME DETECTE: NON ALIMENTATION DE LA TABLE :'|| cur2.table_name||' ');
                  res := WRITE_FILE(file_id, '---------------------------------------------------------------------------------------------------------------------------------------------------');
                  res := WRITE_FILE(file_id, '');
 
            end if;
 
 
 
 
        end loop;     
 
         res     := WRITE_FILE(file_id, '********************************************************************************************************************************************************');
         res     := WRITE_FILE(file_id, '');
 
     UTL_FILE.FCLOSE(file_id); -- Fermeture fichier             
  END;
l'erreur est:


ORA-01422: l'extraction exacte ramène plus que le nombre de lignes demandé
ORA-06512: à "MARIUS.VERIFICATION_ANNÉE", ligne 26
ORA-06512: à ligne 2