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

SQL Oracle Discussion :

[PLSQL] curseur sur seulement qq enregistrements


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 29
    Par défaut [Résolu] [PLSQL] curseur sur seulement qq enregistrements
    bonjour,

    jaimerais en fait utiliser un curseur qui ne prenne que les enregistrements du rang N au rang N+M, N et M etant des paramatrres passes a la procedure.
    je pourrai faire dans la declaration du curseur un WHERE id BETWEEN N and M mais le probleme est que je peux avoir des trous dans ma sequence de id!!

    merci

  2. #2
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    eeuuuuuh tu pourrais être plus clair ? je ne comprends pas la problématique...

    un bout de code avec une description de ce qu'il fait actuellement et de ce tu voudrais qu'il fasse, ou quelque chose comme ça STP...

  3. #3
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut
    tu peux déclarer une variable index, tu exécute ton cursor sans where puis, tu feras une boucle qui va parcourir ton cursor et à chaque fois tu incrément le var index et feras un test sur index tant qu il est >= à N et < =N+M si c'est vrai tu feras tes traitements...
    juste une idée

  4. #4
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 29
    Par défaut
    en fait jai ce code la
    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
     
    CURSOR curs IS SELECT table1.nom as Nom1, 
                                         table2.nom as Nom2, 
                                         table3.nom as Nom3 
      FROM table1 t1, table2 t2, table3 t3 
        WHERE t1.id=t2.id 
                   AND t2.id=t3.id; 
     
    BEGIN 
      htp.tableOpen(cborder => 'BORDER="0"); 
      FOR enr IN curs LOOP 
          htp.tableRowOpen; 
          htp.tableData(enr.Nom1); 
          htp.tableData(enr.Nom2); 
          htp.tableData(enr.Nom3); 
          htp.tableRowClose; 
        END LOOP; 
      htp.tableClose; 
    END;
    Jaimerais que dans mon curseur je nai que les 10 premiers enregistrements que jafficherai dans une page puis je ferai appele a la meme procedure pour quelle affiche les 10 suivants dans une autre page
    etc
    Jespere que cest plus clair

  5. #5
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Par défaut
    pour les 10 permier record
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CURSOR curs IS SELECT top 10 table1.nom as Nom1, 
                                         table2.nom as Nom2, 
                                         table3.nom as Nom3 
      FROM table1 t1, table2 t2, table3 t3 
        WHERE t1.id=t2.id 
                   AND t2.id=t3.id
           order by ton critère;

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    TOP 10 cela marche à partir de quelle version d'ORACLE ? Je ne connais que ROWNUM !

  7. #7
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 29
    Par défaut
    oui top 10? jai cherche je trouve pas dinfo?

  8. #8
    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
    Faites une recherche sur le forum Oracle. Ce genre de question comme "comment retrouver les 10 premières lignes" revient chaque semaine

  9. #9
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 29
    Par défaut
    oui rownum donne les N premiers enregistrements mais on ne peut pas avoir dintervalle!!

    On ne peux pas filtrer de 100 à 200 simplement parceque ROWNUM correspond à un ID interne au curseur. Lors de l'exécution de la requête, les lignes retournées par la requête sont numérotées de 1 à x, et c'est ce ROWNUM. Hors, cela concerne TOUTE la clause where. Donc, si on rajoute un filtre, même sur ROWNUM, ce ROWNUM partira de toute façon de 1. Pour cette raison, on ne peut limiter que les X première lignes, et non pas de la ligne X à la ligne Y, car dans ce cas, chaque ligne candidate à la requête va se voir attribuée l'ID 1, et donc éjectée, la suivante se retrouve avec 1 aussi, donc éjectée de la même façon, et ainsi de suite.

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Tu mélanges 2 choses :
    1) Je crois que TOP n'existe pas en ORACLE, je ne vouslais pas dire qu'un simple ROWNUM résoud le problème.
    2) la résolution de ton problème : suit le conseil de SheikYerbouti, tu trouveras facilement

  11. #11
    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
    Voilà m'ssieu



    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    SQL> set linesize 500
    SQL> select * from (select rownum NUM, code,texte from messages) ;
     
           NUM       CODE TEXTE
    ---------- ---------- --------------------------------------------------------------------------------
             1        101 Le contact %1 existe déja
             2        102 Ce contact est attaché à des émissions|Vous ne pouvez pas le supprimer
             3        301 Voulez-vous sélectionner l'image %1 pour %2 ?
             4        302 Format, crédit et légende doivent être saisis
             5         51 Paramètre : %1 Inconnu dans la table PARAMETRE
             6        303 L'image %1 existe déjà dans la base photos
             7        304 Page de garde de l'hebdo %1/%2 non créée
             8        103 Un ou plusieurs contacts n'ont pas d'émission attachée
             9        104 Un ou plusieurs genres n'ont pas de contact
            10        201 Voulez-vous supprimer ce paragraphe ?
            11         31 Mot de passe incorrect
     
           NUM       CODE TEXTE
    ---------- ---------- --------------------------------------------------------------------------------
            12         30 Utilisateur inconnu
            13        240 Le numéro d'ordre saisi existe déjà
            14        241 Aucune émission rattachée au Vu de près|s'agit-il d'un "De plus près" ?
            15        242 Voulez-vous supprimer le vu de près|%1 ?
            16         90 Voulez-vous enregistrer les modifications ?
            17         60 Impossible d'écrire dans le fichier d'extraction : %1
            18         61 Le type de paragraphe %1 n'existe pas|Extraction abandonnée
            19         62 L'identifiant du vu de pres %1 est introuvable|Extraction abandonnée
            20         63 L'identifiant de la fiche émission %1 est introuvable
            21         64 La table %1 ou la colonne %2 n'existe pas|Extraction abandonnée
            22         65 L'identifiant du paragraphe %1 est introuvable|Extraction abandonnée
     
           NUM       CODE TEXTE
    ---------- ---------- --------------------------------------------------------------------------------
            23         66 Hebdo non trouvé pour le jour %1|Extraction abandonnée
            24         67 Hebdo n° %1-%2 non trouvé|Extraction abandonnée
            25        400 La date de l'émission régionale doit être comprise entre le %1 et le %2
            26        202 L'identifiant émission %1 est introuvable
            27         80 Erreur %1 durant l'envoi d'un mail
            28        500 Voulez-vous publier %1 ?
            29        203 L'ajout d'un paragraphe en brouillon bascule %1 en mode brouillon
     
     
     
    SQL> select * from (select rownum NUM, code,texte from messages)
      2  where NUM between 1 and 5;
     
           NUM       CODE TEXTE
    ---------- ---------- ------------------------------------------------------------------------
             1        101 Le contact %1 existe déja
             2        102 Ce contact est attaché à des émissions|Vous ne pouvez pas le supprimer
             3        301 Voulez-vous sélectionner l'image %1 pour %2 ?
             4        302 Format, crédit et légende doivent être saisis
             5         51 Paramètre : %1 Inconnu dans la table PARAMETRE
     
     
     
    SQL> select * from (select rownum NUM, code,texte from messages)
      2  where NUM between 6 and 10;
     
           NUM       CODE TEXTE
    ---------- ---------- ------------------------------------------------------------------------
             6        303 L'image %1 existe déjà dans la base photos
             7        304 Page de garde de l'hebdo %1/%2 non créée
             8        103 Un ou plusieurs contacts n'ont pas d'émission attachée
             9        104 Un ou plusieurs genres n'ont pas de contact
            10        201 Voulez-vous supprimer ce paragraphe ?
     
    SQL>

  12. #12
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 29
    Par défaut
    merci beaucoup!
    en plus jai appris un truc sur les requetes!

  13. #13
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Juste un mot pour compléter ce que dit Sheik, dans l'exemple ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select rownum NUM, code,texte from messages order by code
    Le rownum est calculé avant le ORDER BY (dans la version 8 en tout cas), donc si tu veux un order by spécifique, il faut faire quelque chsoe comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select rownum NUM, code, texte from (select code,texte from messages order by code)
    Attention certaines versions n'acceptent pas le order by dans le select d'un FROM

  14. #14
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 29
    Par défaut
    merci
    c ce que jai fais
    bon we tout le monde

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 24/06/2014, 12h28
  2. [AC-2003] positionner curseur sur le dernier enregistrement
    Par willytito dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/07/2012, 18h11
  3. Réponses: 3
    Dernier message: 18/07/2006, 12h16
  4. [DBLookupComboBox] Avoir un curseur sur une DBLookupCoboBox
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/05/2004, 11h52
  5. ROLLBACK sur une seul enregistrement
    Par toctoc80 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2004, 20h22

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