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 :

ROWNUM : Problème


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut ROWNUM : Problème
    Bonjour à tous,

    j'ai un problème avec ROWNUM que je ne saisi pas du tout. Quelqu'un peut m'expliquer pour cette requête fonctionne :
    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
    SELECT 
    	   ROWNUM, 
    	   a.* 
    FROM 
    	 (SELECT 
    	 		 CONT_ID, 
    			 CONT_MUNA, 
    			 GEST_ID, 
    			 PER_ID, 
    			 CONT_CREATEUR, 
    			 CONT_DATE, 
    			 TYPEC_ID, 
    			 TYPED_ID, 
    			 REG_ID, 
    			 CONT_FLAG_ERR, 
    			 CONT_FLAG_SC 
    		FROM CONTROLE
                    ORDER BY 
    	                 CONT_DATE DESC) a 
    WHERE 
    	  CONT_CREATEUR = 92 AND 
    	  ROWNUM >= 1 AND 
    	  ROWNUM <= 2
    .... et celle-ci pas du tout :
    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
    SELECT 
    	   ROWNUM, 
    	   a.* 
    FROM 
    	 (SELECT 
    	 		 CONT_ID, 
    			 CONT_MUNA, 
    			 GEST_ID, 
    			 PER_ID, 
    			 CONT_CREATEUR, 
    			 CONT_DATE, 
    			 TYPEC_ID, 
    			 TYPED_ID, 
    			 REG_ID, 
    			 CONT_FLAG_ERR, 
    			 CONT_FLAG_SC 
    		FROM CONTROLE
                    ORDER BY 
    	                 CONT_DATE DESC) a 
    WHERE 
    	  CONT_CREATEUR = 92 AND 
    	  ROWNUM >= 2 AND 
    	  ROWNUM <= 3
    Pourtant, lorque j'enlève la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AND 
    	  ROWNUM >= 2 AND 
    	  ROWNUM <= 3
    j'ai 4 résultats avec comme rownum 1, 2, 3, 4 ..

    Merci pour votre aide
    PS : j'ai suivi cet exemple pour tenter cette requête : http://oracle.developpez.com/faq/?page=3-1#rownum

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    ROWNUM numérote les lignes à l'affichage uniquement

    Dans le lien, tu vois qu'on utilise le ROWNUM dans la sous-requête

    Sinon, tu as RANK qui est fait pour ça : http://lalystar.developpez.com/fonct...lytiques/#L3.8

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    merci pour la réponse. Ce que je veux c'est faire l'équivalent du LIMIT de mysql suivant une requête à exécuter. Je veux afficher par exemple les 5 premiers enregistrement puis les 5 suivants, etc... C'est pour ça que ROWNUM me paraissait la meilleure solution.
    Ce que je n'arrive pas à saisir c'est pourquoi une clause ROWNUM >=2 AND ROWNUM <=2 ne marche pas alors que ROWNUM >=1 AND ROWNUM <=1 marche.
    Insapiration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT  ROWNUM, a.* 
      2  FROM  ( 
      3      SELECT * 
      4      FROM  emp 
      5      ORDER BY sal 
      6     ) a 
      7  WHERE  ROWNUM < 5 ;
    Je ne vois pas comment RANK peut m'aider.
    En tout cas merci pour votre aide
    PS: j'utilise Oracle 9i

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Lis la faq sur le rownum.

    Pourquoi Rownum = 2 marchera jamais :
    La "première" ligne de ta requete est sélectionnée, oracle lui donne le rownum 1 => Condition false, la ligne n'est donc pas ramenée.
    La "seconde" ligne est sélectionnée, oracle lui donne le rownum = 1 (vu qu'aucune ligne n'a encore été ramenée. => Condition False....
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    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
     
    SQL> select rownum,ename,sal from (select * from emp order by sal);
        ROWNUM ENAME             SAL
    ---------- ---------- ----------
             1 SMITH             800
             2 JAMES             950
             3 ADAMS            1100
             4 WARD             1250
             5 MARTIN           1250
             6 MILLER           1300
             7 TURNER           1500
             8 ALLEN            1600
             9 CLARK            2450
            10 BLAKE            2850
            11 JONES            2975
            12 SCOTT            3000
            13 FORD             3000
            14 KING             5000
     
    14 rows selected.
     
    SQL> select ename,sal from (select * from (select * from emp order by sal) where rownum<4 order by sal desc) where rownum<3 order by sal;
    ENAME             SAL
    ---------- ----------
    JAMES             950
    ADAMS            1100

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ename,sal 
    FROM (	SELECT ROWNUM num, ename, sal 
    	FROM 
    		(SELECT * FROM emp ORDER BY sal) 
    	) 
    WHERE num BETWEEN 2 AND 3 
    ORDER BY sal
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    un grand merci pour votre aide, j'ai réussi à résoudre mon pb

    à bientôt

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

Discussions similaires

  1. Problème avec rownum
    Par comboDev dans le forum SQL
    Réponses: 5
    Dernier message: 06/10/2008, 18h37
  2. ROWNUM : problème
    Par ldims24 dans le forum SQL
    Réponses: 2
    Dernier message: 29/05/2007, 10h15
  3. Problème Requête Rownum
    Par ldims24 dans le forum SQL
    Réponses: 3
    Dernier message: 08/05/2007, 18h17
  4. Problème de requête rownum
    Par elsodiop dans le forum DB2
    Réponses: 3
    Dernier message: 01/12/2006, 15h21
  5. Réponses: 34
    Dernier message: 18/08/2006, 14h48

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