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 :

Compter nombre de résultats d'un CURSEUR


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut Compter nombre de résultats d'un CURSEUR
    Bonsoir

    Je place dans un curseur, le résultat d'un sélect.
    Mon but est en fait de faire une action, seulement si ce curseur est vide.

    En gros, mon but est d'insérer une valeur dans une table si celle-ci n'est pas déjà présente...
    Je fais donc donc un sélect, et si je n'ai aucun résultat, j'insère ma valeur.

    Actuellement, j'ai donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    OPEN c_present(id);
    dbms_output.put_line('NBR ROW:'||c_present%ROWCOUNT);
    CLOSE c_present;
    Le problème est que même si le sélect du curseur retourne un résultats, au final, le %ROWCOUNT me retourne 0...

    D'après un post que j'ai vu sur ce forum, cela devrait fonctionner.
    Mais cela ne fonctionne pas, et j'ai vu sur un autre tuto que cela ne retourne pas le nbre d'enregistrements du curseur....

    Je précise, que j'aimerais éviter autant que possible de boucler sur ce curseur (sinon, dans ce cas, je pourrai faire une bidouille avec un variable pour savoir si on a bouclé dessus...)

    merci pour votre aide !

  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
    Par défaut
    Si tu n'as pas fait de fetch, rowcount est toujours égal à 0.

  3. #3
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Dans ce cas précis, il peut être plus simple d'utiliser un ordre Select ... Into et de gérer l'insertion dans l'exception : NO_DATA_FOUND.

  4. #4
    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
    Citation Envoyé par bobic Voir le message
    ...
    Mon but est en fait de faire une action, seulement si ce curseur est vide.

    En gros, mon but est d'insérer une valeur dans une table si celle-ci n'est pas déjà présente...
    Une contrainte de type unique devrait suffire.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut
    mnitu, en fait, je ne peux pas toucher à la base
    SheikYerbouti, oui en effet, je vais faire cela. Je suis parti comme un *** sur un curseur vu que j'en ai fait quelques uns, et quà la base je pensais boucler dessus. Mais vu que je ne veux pas boucler, je vais faire un simple select

    Merki beaucoup !

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut
    J'ai tjs un petit prob...
    J'ai bien fait mon sélect, et ajouté un EXCEPTION...
    Seulement, ma procédure ne veut pas compiler.... L'erreur se situe en fait sur l'exception:

    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
     
     
    BEGIN
     
     
    FOR ......... LOOP
     
     
    	SELECT * INTO xxxx FROM matable WHERE motcle='test';	
     
    EXCEPTION WHEN NO_DATA_FOUND THEN
              		dbms_output.put_line('Aucun enregistrement');
     
    suite du code de taitement (autres boucles, etc....)
    END LOOP;
     
    END;

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Salut,
    De manière générale, indiquer le message d'erreur peut aider.

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Salut,

    Il te manque un BEGIN avant le select et un END après l'exception.

    De plus tu es sûr que ta requête te renvoie seulement 0 ou 1 ligne, sinon ça plantera à l'execution.

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut
    En fait pour le message d'erreur, il ne me sort rien, tout au moins, je ne trouve pas l'erreur dans TOAD.

    Pour le reste, en effet, avec un BEGIN END,avant et après donc, cela fonctionne à la compile.

    Sinon, oui, la requête ne me renvoit que un seul résultat obligatoirement

    merci !

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

Discussions similaires

  1. Requête compter le nombre de résultats par tranche de 5mn
    Par Sethenssen dans le forum Requêtes
    Réponses: 9
    Dernier message: 20/01/2014, 15h15
  2. [MySQL] compter le nombre de résultat et faire la boucle est 'il plus rapdie que 2 foreach?
    Par keokaz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/09/2011, 22h57
  3. [MySQL] Compter le nombre de résultat d'une requête
    Par gueud dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/02/2008, 13h51
  4. Réponses: 7
    Dernier message: 31/01/2008, 08h50
  5. [ODBC] Compter le nombre de résultats
    Par Artusamak dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/06/2006, 12h03

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