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 :

[10g] Curseur imbriqué


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut [10g] Curseur imbriqué
    Salut à tous,
    J’ai commencé le plsql il ya de cela 1 semaine déjà. Et voici mon problème. J’ai cette procédure plsql qui fonctionne bien. Mais mon problème est que je reçois plus de résultats que prévu.

    Soient mes tables :
    Table1
    Id1| val1|val2
    1 200 302
    2 104 222

    Table2
    Id2| nr| bez| bez2
    1 1 A Abien
    2 2 B Bien
    3 3 C Pass

    Table3
    id1|nr|bez2|bez|id1|ids

    je selectionne à l’aide d’un curseur id1 dans la table1, et à l’aide d’un autre curseur2 id1|nr|bez|bez2 dans la table2 pour construire la table3. Dans la table3 je dois me retrouver avec 6 lignes qui sont les suivantes :

    Table 3
    id1|nr|bez2| bez|id1|ids
    1 1 Abien A 1 1
    2 2 bien B 1 2
    3 3 pass C 1 3
    4 1 Abien A 2 1
    5 2 bien B 2 2
    6 3 pass C 2 3

    Mais mon code me retourne 9 lignes, donc le dernier bloc 2 fois au lieu d’une fois. Je ne sais pas ou se trouve ma faute. Aidez moi SVP ?
    Est-ce une erreur dans ma boucle ? Je ne vois plus claire. Aidez moi svp ?

    Resultat de la requete
    id1| nr| bez2| bez| id1| ids
    1 1 Abien A 1 1
    2 2 bien B 1 2
    3 3 pass C 1 3
    4 1 Abien A 2 1
    5 2 bien B 2 2
    6 3 pass C 2 3
    7 1 Abien A 2 1
    8 2 bien B 2 2
    9 3 pass C 2 3

    Mon code plsql sous ORACLE 10 g
    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
    Declare
    c1 table1.id1%TYPE;
    c2 table2.id2%TYPE;
    c3 table2.nr%TYPE;
    c4 table2.bez%TYPE;
    c5 table2.bez2%TYPE;
     
    cursor monCursor is select id1 from table1 order by datum;
    cursor monCursor2 is select id2, nr, bez,bez2 from table2 
                         from table2 order by schicht_nr;
    Begin
        open monCursor;
        loop
            fetch monCursor into c1;
            --2eme Curseur---
                open monCursor2;
                loop
                    fetch monCursor2 into c2, c3, c4, c5;
                    exit when  monCursor2%NOTFOUND;
                        insert into table3(id1,nr,bez2,bez,id1,ids)
                        values(table3_seq.nextval,c3,c5, c4,c1,c2);
                end loop;
                close monCursor2;
                exit when monCursor%NOTFOUND;
                end loop,
                close monCursor;
    end;
    Merci de vos aides
    Fiona

  2. #2
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Avant d'aller plus loin, c'est bien ça qui crée ton deuxième curseur(monCursor2)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cursor monCursor2 is select id2, nr, bez,bez2 from table2
    from table2 order by schicht_nr;
    P.S: Utilise la balise code STP

  3. #3
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Citation Envoyé par rvfranck Voir le message
    Avant d'aller plus loin, c'est bien ça qui crée ton deuxième curseur(monCursor2)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cursor monCursor2 is select id2, nr, bez,bez2 from table2
    from table2 order by schicht_nr;
    P.S: Utilise la balise code STP
    Salut rvfranck,

    oui c'est bien ca qui cree moncursor2? Est-ce là la faute?



    Merci
    Fiona

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Salut,
    Le exit du curseur1 doit être placé juste après le fetch, comme c'est le cas pour curseur2.

  5. #5
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut skuatamad,

    how? Mille fois merci. J'obtient maintenant les resultats que j'attendais

    Merci encore pour votre aide.

    Bonne journée
    Fiona

  6. #6
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Pour être franc j'ai pas compris pourquoi ton curseur numero 2 se crée alors que ta deux clauses FROM.
    ça marche avec des CURSEURS? si vous avez un lien pour m'expliquer cette syntaxe, je suis preneur.

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

Discussions similaires

  1. Comment ėviter les curseurs imbriquės de mon traitement ?
    Par sak_ura dans le forum Développement
    Réponses: 1
    Dernier message: 12/05/2015, 09h20
  2. [10g] Curseur paramétré
    Par haykelFST dans le forum PL/SQL
    Réponses: 2
    Dernier message: 09/11/2012, 18h13
  3. Réponses: 2
    Dernier message: 20/02/2008, 17h43
  4. Réponses: 6
    Dernier message: 19/10/2006, 17h16
  5. PL/SQL : Curseurs imbriqués
    Par Prismadeath dans le forum PL/SQL
    Réponses: 7
    Dernier message: 23/04/2006, 15h09

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