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 :

Utiliser le résultat d'une requête dans une variable


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Utiliser le résultat d'une requête dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    declare
    vnumint INTEGER;
     
        BEGIN
    SELECT o.ob_num INTO vnumint 
    FROM ob o 
    WHERE o.ob_ref_int LIKE '%&REFINT%';
     
                  SELECT * FROM ob WHERE ob_numint = 'vnumint'; 
          END;
    /
    voila la première requête est très consommatrice et je l'utilise dans plusieurs sous-requête
    le résultat de cette requête est unique 1 enregistrement
    je voudrais ranger ce résultat dans une variable et appeler cette variable dans plusieurs autres requêtes
    merci

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Pourquoi avoir mis des quotes autour de l'appel à la variable vnumint, vous demandez implicitement une conversion à Oracle et il est fort probable que de ce fait l'index sur ob_numint (s'il existe) ne soit pas utilisé.

    Que donne ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare
    vnumint INTEGER;
     
    BEGIN
      SELECT o.ob_num INTO vnumint 
      FROM ob o 
      WHERE o.ob_ref_int LIKE '%&REFINT%';
     
      SELECT * FROM ob WHERE ob_numint = vnumint; 
    END;
    /

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    WHERE o.ob_ref_int LIKE '%&REFINT%'
    a mon avis un full table traine par ici , combien de ligne dans la table ob ?

    cordialement

  4. #4
    Membre régulier Avatar de khand
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2008
    Messages : 120
    Points : 118
    Points
    118
    Par défaut
    Salut,

    Citation Envoyé par ti.rom Voir le message
    [code]
    ...
    WHERE o.ob_ref_int LIKE '%&REFINT%';
    ...
    C'est pas très optimisé cette ligne. Il y a surement moyen de faire mieux, et d'intégrer un autre "where" directement dans les requêtes suivantes.

    Bonne journée.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 34
    Points
    34
    Par défaut bind variable
    bonjour,
    pour passer une variable pendant une session oracle du sql vers du pl/sql et inversement vous pouvez utiliser les bind variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SQL>
    -- bind variable SQL
    var vnumint  NUMBER 
    BEGIN
    SELECT o.ob_num INTO :vnumint 
      FROM ob o 
      WHERE o.ob_ref_int LIKE '%&REFINT%';
    END;
    /
     
    SELECT * FROM ob WHERE ob_numint = :vnumint;
    salutations

Discussions similaires

  1. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  2. Résultat d'un champ d'une requête dans une variable
    Par PsychedeChed dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/01/2009, 12h50
  3. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  4. Réponses: 2
    Dernier message: 02/06/2006, 11h26
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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