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 :

REF CURSOR... Comment ça marche ?


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Par défaut REF CURSOR... Comment ça marche ?
    Bonjour,
    J'ai un petit soucis, je ne parviens pas à créer de procédure retournant un curseur de type variable (REF CURSOR) en dehors d'un package. Est-ce normal ?
    En fait lorsque je compile ma procédure
    create or replace PROCEDURE SP_GET_USAGERS(
    proc_NOM IN USAGER.NOM%TYPE :='%',
    proc_PRENOM IN USAGER.PRENOM%TYPE :='%',
    o_Cursor OUT REF CURSOR) IS
    BEGIN
    OPEN o_Cursor FOR
    SELECT USAGER_ID, NOM, PRENOM
    FROM USAGER WHERE NOM LIKE proc_NOM and PRENOM like proc_PRENOM;
    END SP_GET_USAGERS;
    J'obtient le message d'erreur suivant :

    PLS-00201: identifier 'CURSOR' must be declared
    En fait je n'ai pas ce soucis si je passe par un package, car je défini un type "o_crs = REF CURSOR "dans mon corp de package...
    N'ai-je pas d'autre solution ?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Par défaut
    non c'est le moyen le plus simple et le plus efficace

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Par défaut
    Merci... Quand même...
    J'avais un peu peur d'avoir cette réponse Mais je vais faire avec.

    Ca ne pose pas de problèmes de performance, un package étant je crois "systématiquement monté" par le système à la première utilisation d'un de ses composants ?
    Doit-on se charger d'une désallocation du cursor après son utilisation ? a priori je n'ai rien trouvé de tel, mais je trouve ça assez étrange ?

    Encore désolé pour ces questions de pur néophite mais il faut un dé&but à tout !!!
    Patrice

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Par défaut
    Non ca pose pas de problèmes de performances, le package est ensuite gardé en mémoire après son premier chargement donc ca ne pose pas spécialement de pb sauf si ta SGA fait 20Mo

    Pour la désallocation du curseur celle ci se fait automatiquement lorsque tu fais le CLOSE.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Par défaut
    Arg ! C'est bien ce que je pensais...
    Dans le cas où j'utilise une procédure stockée qui est appellée depuis une application donnée, j'utilise en fait mon curseur comme variable de retour me permettant d'alimenter un Dataset (Pour un dev .Net). Je ne vois pas bien comment je peux effectuer le CLOSE sur le curseur dans la mesure où j'y accède depuis mon application, au travers d'un dataAdapter. Lorsque je vais fermer ma connection sur la base, vais-je par là même occasion "tuer" mes curseurs ?
    Je pose ces questions car j'ai eu l'impression que les ressources allouées à mon serveur on un peu rtendance à s'essoufler lorsque je laisse tourner mon apppli de test mais je n'ai rien de bien significatif ...
    Merci encore.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Par défaut
    Tu as tout à fait raison je ne suis pas sur qu'il le ferme automatiquement à toi de le faire dans la procédure qui récuperer le curseur.

    Tu récuperes ton curseur
    Tu vérifies si il est ouvert
    Tu fais tes actions
    Tu le fermes

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Par défaut Pour information ...
    Concernant l'utilisation des curseurs variables (REF CURSOR) en dehors des package, j'ai trouvé une solution de contournement consistant à définir un type REF CURSOR dans un package et ensuite à utiliser ce type depuis ma procédure stockée (hors package donc) en le référençant pour ma variable OUT de la façon : NOM_PACKAGE.NOM_TYPE.

    Ca marche bien, et en plus ça me permet par la même occasion de contourner un autre soucis que j'avais évoqué à savoir l'impossibilité depuis Crystal Report d'accéder aux objets (Stored procedures) à l'intérieur des packages. (En utilisant l'EDI MS Visual Studio .Net) http://www.developpez.net/forums/vie...069&highlight=

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

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/02/2004, 21h39
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

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