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

Oracle Discussion :

comter le nb de ligne sans rejouer la requete


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut comter le nb de ligne sans rejouer la requete
    bonjour,
    une petite question
    comment compter le nb de ligne que ramene une requete sans la rejouer
    avec un count(*)?

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Je ne comprends pas trop ta question, mais tu as sql%rowcount qui t'indique combien de lignes ta requête a ramené de lignes.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    count(*) va rejouer la requête, il est juste moins cher en entrée/sortie puisqu'il ne ramène pas grand chose.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    je souhaite connaitre le nombre de ligne que ramene une requete avant que le resultat de la requete ne s'affiche à l'ecran.
    En fait mon pb est :afficher les resultats que si le requete ramene plus de 50 lignes.

  5. #5
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    C'est assez bizarre comme requirement, mais je pense que tu peux essayer qqchose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select   1
    from     dual
    where    exists (
                select   *
                from            
                   (
                      select   /*+ FIRST_ROWS */ a.*, rownum rnum
                      from     TEST a
                      where    rownum <= 50
                   )
                where    rnum = 50         
             )
    Ca évite de faire un count(*) mais ca te permet de savoir s'il y a au moins 50 lignes...


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Et comment affiches-tu tes résultat ? avec quel outil ? Peut-être pourrions-nous te suggérer une méthode pour contourner le problème ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos reponses,
    il s'agit d'un BDD acceder via Bo sur des données sensibles dont certaine sont cryptée,et le client ne veut pas que ses utilisateurs puissent ramenner moins de n ligne sur certaine requete afin de garantir l 'anonymisation de ses données.
    =>test de la requete avant d 'envoyer le resultat

  8. #8
    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
    laly -> je crains que ta proposition ne fontionne pas du tout

    Par contre, l'utilisation du COUNT comme fonction analytique me semble être une piste plus prometteuse

  9. #9
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Bien vu Orafrance, je pense que c'est la bonne solution.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  10. #10
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    le client ne veut pas que ses utilisateurs puissent ramenner moins de n ligne sur certaine requete
    alors pourquoi compliquer les choses ?
    il suffit d'ajouter dans les requettes

  11. #11
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par orafrance
    laly -> je crains que ta proposition ne fontionne pas du tout
    Comment ca ?

    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
     
    SQL> select count(*) from all_objects;
     
      COUNT(*)
    ----------
          3439
     
    -- il y a plus de 50 lignes
    SQL> select   1 
      2  from     dual 
      3  where    exists ( 
      4              select   * 
      5              from            
      6                 ( 
      7                    select   /*+ FIRST_ROWS */ a.*, rownum rnum 
      8                    from     ALL_OBJECTS a 
      9                    where    rownum <= 50 
     10                 ) 
     11              where    rnum = 50          
     12           )  
     13  /
     
             1
    ----------
             1
     
    -- il y a moins de 50 lignes
    SQL> select   1 
      2  from     dual 
      3  where    exists ( 
      4              select   * 
      5              from            
      6                 ( 
      7                    select   /*+ FIRST_ROWS */ a.*, rownum rnum 
      8                    from     (select * from ALL_OBJECTS where rownum < 10) a 
      9                    where    rownum <= 50 
     10                 ) 
     11              where    rnum = 50          
     12           )                                    
     13  /
     
    no rows selected


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  12. #12
    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
    Citation Envoyé par bouyao
    alors pourquoi compliquer les choses ?
    il suffit d'ajouter dans les requettes
    cela aura pour effet de ramener les n premières lignes et non les lignes SI il y en a au moins n

  13. #13
    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
    laly -> c'est bien ce que je dis

    Tu fais le test mais ça ne te raméne pas les lignes

    donc t'es obligé de faire 2 fois la requête même si dans le test du limite le nombre de fetch

  14. #14
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Euh oui effectivement, je viens de relire le thread et c'est justement pour éviter ce que je fais !

    Pour me rattraper, je pourrais dire que c'est la première brique :

    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
     
    select   *
    from     TEST
    where    exists (         
                select   1 
                from     dual 
                where    exists ( 
                              select   * 
                              from            
                                 ( 
                                    select   /*+ FIRST_ROWS */ a.*, rownum rnum 
                                    from     TEST a 
                                    where    rownum <= 50 
                                 ) 
                              where    rnum = 50          
                           )  
             )
    où TEST est à remplacer par la requête entre (...)


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  15. #15
    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
    Voila ce que je propose si tu le permets

    SELECT * FROM
    (
    select req.*, count(*) OVER (partition by dummy) num_rows
    from
    (
    [La requête qu'il veut en ajoutant ,1 dummy]
    ) req
    )
    WHERE num_rows >= 50
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT * FROM
    (
      select req.*, count(*) OVER (partition by dummy) num_rows
      from
      (
       select obj.*, 1 dummy
         from all_objects obj
        where owner='&1'
      ) req
    )
    WHERE num_rows >= 50
    Il doit y avoir moyen de faire mieux mais là je vois pas

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    OAUHHHHH elle est tres belle cette requete
    autant je comprends celle de laly autant la je comprends pas tout
    mais cela marche j'ai teste!
    merci à tous

  17. #17
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Ne pourrait-il pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select *
    from (select table.*, 
                 count (*) over (partition by [colonnes de la clause where]) nb
          from table
          where ....)
    where nb > 50
    Ce qui donnerait avec l'exemple d'orafrance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM 
    ( 
      select a.*, count(*) OVER (partition by owner) num_rows 
      from all_objects a
      where owner='&1' 
    ) 
    WHERE num_rows >= 50
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  18. #18
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    On peut faire directement

    sans colonne dummy.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  19. #19
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par lalystar
    On peut faire directement

    sans colonne dummy.


    Laly.
    Oui, dans ce cas c'est encore plus simple
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  20. #20
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par boyardeC
    OAUHHHHH elle est tres belle cette requete
    autant je comprends celle de laly autant la je comprends pas tout
    Tu peux lire l'article de lalystar sur les fonctions analytiques pour y voir plus clair :
    http://lalystar.developpez.com/fonctionsAnalytiques/

    Citation Envoyé par boyardeC
    mais cela marche j'ai teste!
    merci à tous
    Alors n'oublie pas de cliquer sur le bouton Résolu
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Saut de ligne sans <br/>
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 21/06/2007, 11h21
  2. Réponses: 11
    Dernier message: 02/11/2006, 16h50
  3. Traitement ligne par ligne sans curseur
    Par AbyssoS dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/02/2006, 17h46
  4. JTextPane: retour à la ligne sans changement de paragraphe
    Par The Rock dans le forum Composants
    Réponses: 1
    Dernier message: 24/11/2005, 16h02
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

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