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 :

PL/SQL : décaler un curseur


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Par défaut PL/SQL : décaler un curseur
    Bonjour,


    je souhaiterais décaler mon curseur d'un enregistrement sans pour autant utiliser une boucle. Sauriez-vous comment faire ?

    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
     
     
    DECLARE 
     
    CURSOR my_cursor IS
     
      SELECT * FROM ma_table
      WHERE champ2 > 1000
    ...
     
    BEGIN
     
    FOR my_record IN my_cursor LOOP
     
    IF my_record.champ1=1 
        THEN
             <DECALER LE CURSEUR D UN ENREGISTREMENT>
    ENDIF
     
    EXECUTE PR_ESSAI(my_record.champ3);
     
    END LOOP
    merci de votre aide.

    Magic

    PS: je suis en Oracle 10i

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Délolé mais je ne comprends pas la question ni le besoin. Si la première valeur ne vous convient pas, ignorez-la.

  3. #3
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Par défaut
    Bonjour,

    Dans l'exemple que tu donne la boucle

    FOR my_record IN my_cursor LOOP

    avance le curseur automatiquement à chaque itération.

    Le plus simple je crois c'est de laisser ce curseur tranquille et de mettre une condition inverse qui va executé ta commande que lorsque tu le souhaite :
    IF my_record.champ1 != 1
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  4. #4
    Membre confirmé Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Par défaut
    Merci de votre aide.

    Je sais bien que la boucle avance le curseur automatiquemet à chaque itération mais je souhaiterais le faire manuellement. L'exemple que j'ai à traiter est assez complexe. C'est pourquoi j'ai essayé de prendre un cas simple ou peut être un équivalent de next record n'est pas véritablement judicieux.

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Vous pouvez gérer plus "manuellement" votre curseur avec la syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Open ...
    Loop
      Fetch ...
      exith when ...
      ...
    end loop;
    close ...
    m'enfin, cela ne fait pas une grosse différence !

  6. #6
    Membre confirmé Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Open ...
    Loop
      Fetch ...
      exit when ...
      ...
    end loop;
    close ...
    Dans votre réponse, si j'ai bien compris il s'agirait de mettre une "boucle dans la boucle" qui permettrait de gérer les cas ou on aurait besoin de passer au record suivant ?

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Désolé, mais je ne comprends toujours pas le besoin.
    Vous devez ignorer certains enregistrements ?
    Si vous ne pouvez pas tout filtrer directement dans l'ordre Select constitutif du curseur, gérer ce qui vous convient dans un if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For xx in zz Loop
       If condition then
          --on traite
          ...
       End if ;
    End loop ;

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

Discussions similaires

  1. [PL/SQL] Déclaration de curseur
    Par pepin21 dans le forum SQL
    Réponses: 2
    Dernier message: 25/09/2006, 15h32
  2. PL/SQL :Retourner un curseur dans une procédure
    Par madina dans le forum PL/SQL
    Réponses: 1
    Dernier message: 24/05/2006, 17h36
  3. [PL/SQL] parcours de curseur
    Par NPortmann dans le forum Oracle
    Réponses: 20
    Dernier message: 20/05/2005, 21h51
  4. Réponses: 5
    Dernier message: 23/02/2005, 09h43
  5. [PL/SQL] SQL Dynamique et curseur
    Par Loko dans le forum Oracle
    Réponses: 10
    Dernier message: 23/11/2004, 16h18

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