Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2008, 22h00   #1
Nouveau Membre du Club
 
Inscription : juin 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 271
Points : 32
Points : 32
Par défaut taille d'un curseur

bonjour,
Je précise que je travaille avec Oracle.

Je cherche à obtenir la taille d'un curseur.
je déclare le curseur comme ci-dessus:
Code :
1
2
3
4
5
6
 
CURSOR c_cursor
           IS 
           SELECT partition_name 
           FROM all_tab_partitions 
           WHERE table_name = nametable ;
Ensuite dans le corps, je fais:
Code :
1
2
3
4
5
6
7
8
9
10
 
                OPEN c_cursor; 
 
                 Pkg_log.fonction_log (' taille de cursor' || c_cursor%ROWCOUNT); 
                 IF ( c_cursor%ROWCOUNT > 1) 
                 THEN 
                         LOOP 
                         FETCH c_cursor 
                         INTO vartemp; 
                         ...
Donc lorsque j'affiche la taille, j'ai tjrs une valeur de 0.
ouinih est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 22h37   #2
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Bonjour,

attention Rowcount permet de connaitre combien de ligne tu a parcouru, plus précisément ou tu te trouve dans ton curseur.
Donc avant de commencer de parcourir tu te trouve bien a 0
si tu écrit ton log après le parcours tu aura normalement la taille de ton curseur.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 23h45   #3
Invité régulier
 
Inscription : avril 2006
Messages : 16
Détails du profil
Informations personnelles :
Localisation : Tunisie

Informations forums :
Inscription : avril 2006
Messages : 16
Points : 7
Points : 7
... cela étant dit, tu peux toujours utiliser la fonction de groupe COUNT pour extraire la taille de ton curseur
bach est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 10h56   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Quel est le besoin d'avoir la taille du curseur ?

Si c'est pour éviter le Fetch, passe par un
Code :
FOR rec IN curseur LOOP .. END LOOP;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 11h29   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par McM Voir le message
Quel est le besoin d'avoir la taille du curseur ?

Si c'est pour éviter le Fetch, passe par un
Code :
FOR rec IN curseur LOOP .. END LOOP;
C'est quoi ?
Citation:
éviter le Fetch
parce que dans la solution que tu propose il y aura "le Fetch".
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 12h34   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Code :
1
2
3
4
5
6
FOR r IN (SELECT partition_name 
           FROM all_tab_partitions 
           WHERE table_name = nametable)
LOOP
  vartemp := r.partition_name; 
END LOOP;
Il n'y a pas la fonction "FETCH c_cursor"
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 15h36   #7
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Mais pourtant c'est bien les FETCH quel intérêt de s'en passer ?
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2008, 16h06   #8
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
dans une boucle For, le fetch est implicite...
puisque la select est automatiquement exécuté et la première lignes affectée au record r (ou rec, ou le nom qu'on lui donne...)

en fait un Open cursor permet de parser le Select mais pas de l'exécuter... il est exécuté au premier fetch.
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 13h47   #9
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Et surtout tu t'embêtes pas à fermer le curseur en cas d'erreur, à vérifier si une ligne est ramenée, etc..
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 15h20   #10
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Et en plus t'as pas besoin de déclarer au préalable ni ton curseur ni la variable
ex:

Code :
1
2
3
4
5
6
7
 
FOR cur_rec IN (SELECT * FROM toto)
loop
 
blablablabala
 
end loop;
ici cur_rec n'a pas besoin d'être déclaré, et tu ne déclares pas de curseur non plus.
C'est pas de la bombe ça???
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 15h23   #11
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Citation:
Envoyé par farenheiit Voir le message
...
ici cur_rec n'a pas besoin d'être déclaré, et tu ne déclares pas de curseur non plus.
C'est pas de la bombe ça???
mouais...
sauf que dans un package body de 10'000 lignes à corriger/déboguer, tu va te taper tout le code pour aller retrouver tous les Select des curseurs...

alors que si ils sont tous sagement déclarés dans les section déclaratives des procédures tu sais toujours où les retrouver !

en gros c'est de la flemme et pas génial à maintenir !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 15h35   #12
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Oui bien sur, mais dans le cas d'un curseur dans un petit bloc Pl/SQL on perd moins de temps et on ne perd pas en lisibilité
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 15h57   #13
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Oh, mais tu peux toujours garder ton curseur dans la partie déclarative avec le LOOP

Et puis quand j'ai 10000 lignes de code, moi ça m'irrite de devoir remonter à chaque fois tout en haut pour savoir ce que fait ce curseur, puis revenir à ma ligne.. le temps de la retrouver, j'ai perdu 15 sec
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 16h08   #14
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Citation:
Envoyé par McM Voir le message
...
Et puis quand j'ai 10000 lignes de code, moi ça m'irrite de devoir remonter à chaque fois tout en haut pour savoir ce que fait ce curseur, puis revenir à ma ligne.. le temps de la retrouver, j'ai perdu 15 sec
c'est pour ça que les outils genre Toad permettent de poser des "bookmarks" sur des no de ligne, afin de naviguer plus facilement à travers son code...

enfin ensuite ce n'est qu'un question de choix et de préférence... ça ne change rien à l'exécution.
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 16h19   #15
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Citation:
Envoyé par Yorglaa Voir le message
c'est pour ça que les outils genre Toad permettent de poser des "bookmarks" sur des no de ligne, afin de naviguer plus facilement à travers son code...
Ah bon? je ne savais pas ça...ça m'interesse...comment tu fais??
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 09h00   #16
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
lorsque tu es sur ton editeur PL/SQL, clic-droit puis :
- "Toggle bookmark" permet de poser les bookmark de 0 à 9, le bookmark est posé à la ligne où est positionné le curseur.
- "Goto bookmark" permet d'aller au bookmark de son choix (0 à 9) et te ramène à la position voulue
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 09h48   #17
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
ok merci..mais si tu veux revenir à ton point de départ t'es obligé de définir un bookmark aussi?
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 10h34   #18
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
oui, en général je pose mon premier bookmark à mon point de départ...
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 10h40   #19
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Cool...si t'as d'autres astuces sous TOAD je suis preneur.
Tu connais la touche F4 sur le nom d'une table??? ça c'est hyper pratique aussi sous TOAD
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h59.


 
 
 
 
Partenaires

Hébergement Web