Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/08/2011, 18h10   #1
Invité de passage
 
Homme
Inscription : août 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 1
Points : 0
Points : 0
Par défaut Utiliser le résultat d'une requête dans une variable

Code :
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
ti.rom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 15h32   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
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 :
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;
/
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 16h51   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

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

cordialement
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 08h51   #4
Membre régulier
 
Avatar de khand
 
Homme Jody Lognoul
Développeur Web
Inscription : juillet 2008
Messages : 120
Détails du profil
Informations personnelles :
Nom : Homme Jody Lognoul
Âge : 27
Localisation : Belgique

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

Informations forums :
Inscription : juillet 2008
Messages : 120
Points : 90
Points : 90
Envoyer un message via Skype™ à khand
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.
khand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h39   #5
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : 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 : 33
Points : 33
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 :
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
t.merle est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h42.


 
 
 
 
Partenaires

Hébergement Web