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 :

Occurrence dans une boucle


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut Occurrence dans une boucle
    Bonjour,
    Je suis sous Oracle 8i et travaille avec des curseurs.

    Comment savoir qu'on est sur la dernière occurrence de la boucle ?

    J'avais eu le même problème pour la première occurrence que j'avais contourné par un compteur.
    Mais là j'avoue je sèche complétement, malgré mes recherches je n'ai pas trouvé comment faire.

    Merci pour ceux qui vondront bien m'aider...

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    C'est le %ROWCOUNT qui peut vous fournir l'information, tant que le curseur n'est pas fermé. On quitte quand il n'y a plus de lignes (%NOTFOUND), et on regarde le compteur.

    Je pense que ce code fonctionne aussi en 8i.
    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
    set serveroutput on
     
    declare
        cursor c_emp is select * from scott.emp order by ename;
        v_emp c_emp%rowtype;
    begin
        open c_emp;
        loop
            fetch c_emp into v_emp;
            exit when c_emp%notfound;
            dbms_output.put_line(v_emp.ename);
        end loop;
        dbms_output.put_line('Il y a ' || c_emp%rowcount || ' lignes');
        close c_emp;
    end;
    /

  3. #3
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Ok merci beaucoup, j'avais pas pensé à cette solution.
    Je teste ça avant de mettre

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bon alors j'ai trouvé encore plus simple :
    Normalement si je place mon traitement après la boucle alors mes variables ont gardées les données du dernier enregistrement de mon curseur.

    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
    OPEN C_(v_4);
     LOOP
      FETCH C_ INTO v_1, v_2, v_3;
     
       v_occ := v_occ + 1;
     
       -- pas d'occurrences
       IF (C_%NOTFOUND OR C_%NOTFOUND IS NULL) THEN
     
        INSERT INTO MaTable VALUES MesDonnes;
     
       END IF;
     
       EXIT WHEN C_%NOTFOUND OR C_%NOTFOUND IS NULL; 
     
       -- 1ere occurrence 
       IF (v_occ = 1) THEN
     
        INSERT INTO MaTable VALUES MesDonnes;
     
       END IF;
     
     END LOOP;
     
     -- dernière occurrence
     IF (v_3 < v_5) THEN
     
      INSERT INTO MaTable VALUES MesDonnes;
     
     END IF;
     
    CLOSE C_;
    Après quelques tests cela me semble bon mais si vous avez des remarques n'hesitez pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  2. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 08h52

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