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 :

Retourner le n° de ligne des lignes d'une requette


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut Retourner le n° de ligne des lignes d'une requette
    Bonjour,

    Désolée pour le dérangement mais j'ai un petit problème
    j'ai le résultat d'une requette...
    Je veux selectionner seulement à partir de la ligne 51234
    j'ai fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    select rowid from ma_table;
    et ça donne des résultats bizarres...
    pouvez vous m'aider??
    merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut
    Si c'est possible une redirection, j'ai fais une petite resherche et j'ai pas trouvé

  4. #4
    Membre éclairé Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Par défaut
    Une petite recherche dans la FAQ avec ROWNUM comme mot clé devrait te donner des résultats en rapport avec ton besoin

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    J’aimerai partager la solution du Tom Kyte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select * 
      from ( select a.*, rownum rnum
               from ( ICI_VOTRE_REQUETE -- avec le order by ) a
              where rownum <= MAX_ROWS )
     where rnum >= MIN_ROWS

  7. #7
    Membre éclairé Avatar de fdubks
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 73
    Par défaut
    une petite question, dans la fac on trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
      FROM (SELECT ROWNUM NUM, ename, job 
              FROM EMP ORDER BY sal
           ) 
     WHERE NUM BETWEEN 1 AND 5;
    Est ce que le code suivant est correct aussi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
      FROM (SELECT ename, job 
              FROM EMP ORDER BY sal
           ) 
     WHERE ROWNUM BETWEEN 1 AND 5;
    Merci

  8. #8
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    oui si le between commence à 1 ce qui est équivalent à where rownum <= 5.

    Si le between commence à 2, alors non, ce n'est pas équivalent.
    Rownum commence à 1 pour la première ligne ramenée par le select, puis 2 pour la seconde ligne.

    Donc where rownum >1 sera toujours faux.

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Citation Envoyé par McM
    Rownum commence à 1 pour la première ligne ramenée par le select, puis 2 pour la seconde ligne.
    Oralce n'affecte les n° de ligne d'une requête qu'après avoir effectivement récupéré les enregistrements. Donc ROWNUM commence toujours par 1, et on ne peut pas directement affecter de borne inférieur sur le N° de ligne...d'où l'idée de passer par une sous-requête pour pouvoir traiter le ROWNUM (de la sous-requête) comme un champ "classique".

    Donc utiliser directement le ROWNUM dans une requête permet au mieux de limiter le nombre de lignes retournées, mais c'est tout. De plus, je pense que pour un
    select * from grosse_table where ROWNUM<=10
    Oracle récupère toutes les lignes avant de filtrer sur le n° ligne...à confirmer.

Discussions similaires

  1. Fonction qui retourne un tableau et non des lignes
    Par siro1 dans le forum Débuter
    Réponses: 9
    Dernier message: 24/03/2014, 15h26
  2. Gestion des lignes vides avant/après une liste
    Par Invité dans le forum Mise en forme
    Réponses: 4
    Dernier message: 28/08/2007, 16h25
  3. Réponses: 3
    Dernier message: 10/04/2007, 18h09
  4. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56
  5. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40

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