bonjour,
une petite question
comment compter le nb de ligne que ramene une requete sans la rejouer
avec un count(*)?
bonjour,
une petite question
comment compter le nb de ligne que ramene une requete sans la rejouer
avec un count(*)?
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.
Bonjour,
count(*) va rejouer la requête, il est juste moins cher en entrée/sortie puisqu'il ne ramène pas grand chose.
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.
C'est assez bizarre comme requirement, mais je pense que tu peux essayer qqchose comme :
Ca évite de faire un count(*) mais ca te permet de savoir s'il y a au moins 50 lignes...
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 )
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...)
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.
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
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
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.
alors pourquoi compliquer les choses ?le client ne veut pas que ses utilisateurs puissent ramenner moins de n ligne sur certaine requete
il suffit d'ajouter dans les requettes
Code : Sélectionner tout - Visualiser dans une fenêtre à part where rownum<n
Questionnaires : Testez vos connaissances
Mes articles :
Les Fichiers Redo / SCN : System Change Number / Fichier de Contrôle : Administration
Comment ca ?Envoyé par orafrance
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...)
cela aura pour effet de ramener les n premières lignes et non les lignes SI il y en a au moins nEnvoyé par bouyao
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
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 :
où TEST est à remplacer par la requête entre (...)
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 ) )
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...)
Voila ce que je propose si tu le permets
exemple :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
Il doit y avoir moyen de faire mieux mais là je vois pas
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
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
Ne pourrait-il pas faire :
Ce qui donnerait avec l'exemple d'orafrance :
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
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.
On peut faire directement
sans colonne dummy.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 count(*) OVER ()
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...)
Oui, dans ce cas c'est encore plus simpleEnvoyé par lalystar
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.
Tu peux lire l'article de lalystar sur les fonctions analytiques pour y voir plus clair :Envoyé par boyardeC
http://lalystar.developpez.com/fonctionsAnalytiques/
Alors n'oublie pas de cliquer sur le bouton RésoluEnvoyé par boyardeC
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager