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

MS SQL Server Discussion :

Procédure avec curseur générique


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut Procédure avec curseur générique
    Bonjour,

    Je cherche à programmer une interface affichant les lignes retournées par une requête passée en paramétre. Ce tableau affiche uniquement les lignes présentes à l'écran et pas la totalité du résultat.

    Au début j'étais parti sur du SQL dynamique basée sur du CTE et de row_number. Ca fonctionne bien tant que le résultat n'est pas trop grand mais dès que cela dépasse une certaine taille c'est super lent.

    J'essaye de me rabattre sur une procédure stockée qui déclare un curseur et en fonction de paramètres, je demande au curseur de me renvoyer x lignes. Cela semble bien fonctionner pour une table mais maintenant j'aimerai rendre la procédure générique !

    Si j'ai bien compris (je suis débutant) il faut absolument déclarer les variables qui contiendront le résultat renvoyé par le fetch. L'idée est donc de générer ces déclarations de variables dynamiquement en fonction de la requête que j'ai passé en paramètre ... sauf que je sèche !! je ne vois pas du tout comment on peut faire ca ?? Avez vous une idée ?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Banissez les curseurs de toute implémentation SQL.
    Je comprends ce que vous voulez faire, mais je ne vois pas pourquoi vous voulez le faire.
    Pourriez-vous nous l'expliquer ?

    @++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    J'écris une application dans un langage propriétaire (je peux pas changer). Je peux au travers de ce langage dialoguer avec SQL

    Je dois programmer une interface qui permette d'afficher des tables ou de faire des opérations de mise à jour.

    Pour que cela soit efficace je souhaite charger uniquement les lignes qui sont affichées à l'écran et pas l'ensemble des lignes renvoyées par une requête.

    Comme j'avais vu dans ce forum que les curseurs étaient à bannir, j'ai mis en place un mécanisme basé sur du CTE qui réalise cela en passant en paramètre la requête qui doit être traitée. Ainsi si l'écran est capable d'afficher 20 lignes, chaque fois que l'on scrolle le programme appelle une procédure SQL qui renvoit les 20 lignes qui vont bien. Ca fonctionne correctement sauf quand le résultat comporte beaucoup de données. Dans ce cas là plus j'avance dans le résultat, plus c'est lent ...

    Je pensais utiliser les curseurs "pour voir" si c'était plus rapide car j'ai vu qu'il y avait des fonctions permettant de "scroller". Maintenant s'il y a un autre moyen de faire je suis preneur ...

    Le principe du curseur me semblait bien car dans ma première méthode à chaque scroll j'appelle une requête qui est traitée et qui envoi ensuite uniquement les lignes nécessaires. Cela me semble contre productif car on refait x fois les mêmes requêtes, on renvoi juste des extraits différents. Je pense que c'est pour cela que c'est très lent quand il y a beaucoup de lignes et.ou que la requête est complexe (je mets ca au conditionnel, je ne suis pas spécialiste).

    Par contre avec les curseurs, me semble t'il, j'ouvre le curseur UNE fois, en ensuite c'est juste de l'extraction de lignes.

Discussions similaires

  1. Exécution procédure avec curseur et UTL_FILE
    Par Cathy dans le forum PL/SQL
    Réponses: 10
    Dernier message: 19/08/2008, 14h38
  2. Erreur procédure stockée : curseur read only
    Par Oluha dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/11/2005, 09h50
  3. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  4. Réponses: 2
    Dernier message: 16/08/2005, 15h33
  5. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08

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