IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

probleme de curseur dynamique


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut probleme de curseur dynamique
    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

  2. #2
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Bonjour,

    Dabord les noms d'objet oracle avec les accents sont a proscrire !!
    il faut chager VERIFICATION_ANNÉE

    C'est quoi FILE_OPEN1 chez toi ,une fonction car Oracle ne le connait pas !!
    pareil pour WRITE_FILE


    Voir ici http://download.oracle.com/docs/cd/B...e.htm#i1004619

    Pour l'erreur ORA-01422 il y a une fonction recherche sur ce forum !
    (Tu dois voir plusieurs réponses)

    En gros tu ramenes trop de lignes , alors que ta requete n'attend qu'une seule reponse !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Bonjour,
    la fonction FILE_OPEN c'est une fonction qui permet d'ouvrir un fichier en lecture et en écriture

    WRITE_FILE PERMET D'écrire dans le fichier.
    le probleme n'est pas au niveau de ces deux fichiers parce que j'arrive à écrire dans le fichier quand il n'ya pas repetition des dates
    voici un exemple du fichier generer par le code

    cordialement

    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
     
    Table SDNQTDBE  
     
     Champ date concerné  DBEMAJ : 
     Le nombre d enregistrement  est:  63
     la date  d enregistrement est: 25/05/09
     
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    I PROBLEME DETECTE: NON ALIMENTATION DE LA TABLE :SDNQTDBE 
    ---------------------------------------------------------------------------------------------------------------------------------------------------
     
     Table SDNQTDBE9  
     
     Champ date concerné  DBEMAJ : 
     Le nombre d enregistrement  est:  63
     la date  d enregistrement est: 25/05/09
     
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    I PROBLEME DETECTE: NON ALIMENTATION DE LA TABLE :SDNQTDBE9 
    ---------------------------------------------------------------------------------------------------------------------------------------------------
     
     Table SDNQTWAET  
     
     Champ date concerné  WETMAJ : 
     Le nombre d enregistrement  est:  1
     la date  d enregistrement est: 01/01/09
     
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    I PROBLEME DETECTE: NON ALIMENTATION DE LA TABLE :SDNQTWAET 
    ---------------------------------------------------------------------------------------------------------------------------------------------------
     
     Table SDNQTWAET1  
     
     Champ date concerné  WETMAJ :

  4. #4
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Lance juste un sql de la commande avec la fonction analytique pour voir ce que ca donne ,
    si tu as plusieurs réponses est ce que fonctionnellement ca veut dire quleques chose ou pas .

    Sinon il faut peut etre faire une sous-requete avant pour eliminer les doublons .

Discussions similaires

  1. probleme Curseur dynamique - forms 6i
    Par medbouh dans le forum Forms
    Réponses: 13
    Dernier message: 28/07/2009, 17h06
  2. ODBC et curseurs dynamique!!!
    Par F@keur dans le forum MFC
    Réponses: 7
    Dernier message: 30/03/2005, 20h05
  3. probleme de tableau dynamique
    Par El Krotal dans le forum C
    Réponses: 9
    Dernier message: 25/06/2004, 17h00
  4. probleme d'allocation dynamique
    Par vince3320 dans le forum C
    Réponses: 10
    Dernier message: 22/04/2004, 16h27
  5. Enregistrement issu d'un curseur dynamique
    Par vanessaf22 dans le forum SQL
    Réponses: 26
    Dernier message: 15/04/2004, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo