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 :

Nombre de tuple dans un curseur dans une procédure


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Points : 73
    Points
    73
    Par défaut Nombre de tuple dans un curseur dans une procédure
    Bonjour,

    J'ai une procédure qui prend un curseur de référence en sortie.
    J'aimerai connaitre le nombre de tuple qu'il contient, afin de lever une erreur s'il ne retourne aucun tuple.
    Pour l'instant, la seule méthode qui m'a été proposée est de faire un fetch dessus et de faire un rowcount ou notfound.

    Le problème de fetch est qu'il me mange la première ligne de résultat.

    Les tables étant assez volumineuses et la recherche assez complexe, j'aimerai une solution qui ne consiste pas à faire un count avant

    Merci !

  2. #2
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Bonsoir,
    Pourrais tu nous en dire plus sur ta procédure et surtout comment tu dirige vers la sortie, Merci.
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Pour l'instant, la seule méthode qui m'a été proposée est de faire un fetch dessus et de faire un rowcount ou notfound.
    Il n'y a pas vraiment d'autre solution.

    Mais attention à la logique de votre code: le niveau d'isolation d'une transaction Oracle est par défaut READ COMMITTED. Si la table entière n'est pas entièrement verrouillée, vous n'avez aucune garantie que 2 exécutions de la même requête dans la même transaction retourne le même résultat: si une transaction concurrente insére une ligne et valide par COMMIT cette insertion pendant l'exécution n°1 de la requête du count(*), l'exécution n°1 du count(*) ne verra pas cette ligne, mais la 2ième exécution du même count(*) verra cette nouvelle ligne

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    A ma connaissance, on est obligé de faire un COUNT avant. Pour Oracle ça fait presque le double du boulot, mais bon, c'est bien pratique pour l'utilisateur final d'avoir le nombre de résultats de la requête même si on n'en affiche que 10 ou 20 à la fois... Et puis le COUNT mets les blocs en cache (bon, pas s'il y a trop de données...)

    rbaraer

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/01/2014, 11h46
  2. Copier une valeur dans un champs depuis une procédure
    Par zinabd dans le forum Designer
    Réponses: 8
    Dernier message: 20/11/2008, 09h31
  3. Réponses: 5
    Dernier message: 09/07/2008, 17h04
  4. Réponses: 1
    Dernier message: 28/12/2007, 18h07
  5. Réponses: 13
    Dernier message: 11/01/2007, 15h39

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