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

PL/SQL Oracle Discussion :

Question sur la substitution de variable et leur référencement.


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut Question sur la substitution de variable et leur référencement.
    Bonjour à tous, malgré mes lectures sur les différents posts, j'ai toujours l'interrogation suivante.

    Je souhaite mettre en place 2 curseurs: curseur_1 et curseur_2, qui diffèrent légèrement l'un de l'autre.
    Je souhaiterais pourvoir appeler ces curseurs au travers d'une variable (variable) qui aurait soit la velur 1 ou la valeur 2:

    Ce qui donnerai:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    open curseur_<variable>;
    fetch curseur_<variable> into ...
    ...
    close curseur_<variable>;

    Mais je bloque sur la syntaxe.
    Merci de vos avis éclairés

  2. #2
    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
    La legère difference consiste en quoi ?

    Peut être que vous cherchez quelque chose de ce type
    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
    18
     
    CREATE PACKAGE emp_data AS
       TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
       PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp, choice INT);
    END emp_data;
     
    CREATE PACKAGE BODY emp_data AS
       PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp, choice INT) IS
       BEGIN
          IF choice = 1 THEN
             OPEN emp_cv FOR SELECT * FROM emp WHERE comm IS NOT NULL;
          ELSIF choice = 2 THEN
             OPEN emp_cv FOR SELECT * FROM emp WHERE sal > 2500;
          ELSIF choice = 3 THEN
             OPEN emp_cv FOR SELECT * FROM emp WHERE deptno = 20;
          END IF;
       END;
    END emp_data;
    Peut être non.

  3. #3
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    En fait la différence entre les 2 curseurs, est dans le fait que l'un est plus restrictif que l'autre au niveau des résultats (au travers de l'utilisation
    d'une table en plus) .

    Je pourrais utiliser ta solution, mais comme le select est assez compliqué, j'ai peur que ça rendre illisible le code à maintenir.

    Mais je mets ta solution de côté.

  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 pascal_T Voir le message
    En fait la différence entre les 2 curseurs, est dans le fait que l'un est plus restrictif que l'autre au niveau des résultats (au travers de l'utilisation
    d'une table en plus) .
    ...
    Dans ce cas utilisez le SQL Dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Open cursor_variable For l_query;
    où l_query est un varchar2 construit dynamiquement.

  5. #5
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    Mon problème est que j'exploite le résultat du curseur par une boucle for.

    Du coup en passant par cete déclaration, je ne peux plus utiliser ma boucle for. Ou alors je n'ai pas bien compris comment ça fonctionne .

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Qu'est-ce qui déclanche l'utilisation d'un curseur plutôt que l'autre ?

    Ne serait-il pas envisageable de prendre le curseur le moins restrictif et de gérer les données par la suite ?

    On peut voir les curseurs ou c'est vraiment trop long (et/ou confidentiel) ?

  7. #7
    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 pascal_T Voir le message
    Mon problème est que j'exploite le résultat du curseur par une boucle for.

    Du coup en passant par cete déclaration, je ne peux plus utiliser ma boucle for. Ou alors je n'ai pas bien compris comment ça fonctionne .
    Il n'y a aucun souci pourtant. Essayez via un exemple simplifié de nous dire où vous avez des difficultés.

  8. #8
    Membre confirmé Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Par défaut
    Bonjour, j'ai enfin réglé mon problème.

    Ma boucle for n'utilise plus un curseur directement comme variable, mais une collection (alimentée par le curseur qui va bien). Ce qui m'a permis de me familiariser avec cette bête là

    Longue vie au forum!

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

Discussions similaires

  1. Question sur l'ajout de variable
    Par insane1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/09/2009, 14h42
  2. [Bash] Question sur la manipulation de variables
    Par sliderman dans le forum Linux
    Réponses: 6
    Dernier message: 03/08/2007, 08h36
  3. Une question sur le stockage des variables
    Par UnReveDeCryptomeria dans le forum C
    Réponses: 10
    Dernier message: 08/06/2006, 23h37
  4. Réponses: 4
    Dernier message: 04/06/2006, 16h53
  5. [PEAR] Objet : Question sur le passage de variable
    Par Norabfr dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 07/01/2006, 01h07

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