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 11/09/2008, 14h34   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 2
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2008
Messages : 2
Points : 0
Points : 0
Par défaut Recherche d'un millier de champs

Bonjour,


Je travaille sur une base de données oracle 10.g sur laquelle on me demande de faire une recherche de champs sur 1778 conditions différentes.

Au départ j'ai eu l'idée de créer 1778 select différents dans un .sql. Exemple:

select ident_t from personne where ident_p='1234';
select ident_t from personne where ident_p='1235';
...

Lorsque je lance mon .sql dans pl/sql developper il m'ouvre 1778 fenêtres.

Y a-t-il un moyen de rentrer l'intégralité des résultats dans une seule fenêtre. J'ai pensé à une boucle for mais je ne sais pas comment faire.

Merci
f3nr1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 16h09   #2
Membre émérite
 
Inscription : août 2008
Messages : 835
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 835
Points : 823
Points : 823
Salut,

Code :
SELECT ident_t FROM personne WHERE ident_p='1234' OR ident_p='1235' OR ...;
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 16h55   #3
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
ou mieux (prise en compte de l'index) :
Code :
SELECT ident_t FROM personne WHERE ident_p IN ('1234', '1235', ...
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 17h18   #4
Membre émérite
 
Inscription : août 2008
Messages : 835
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 835
Points : 823
Points : 823
C'est juste, je sais pas pourquoi je suis parti sur une liste de OR
Soit dit en passant f3nr1, si tes valeurs se suivent ou sont par plages, tu peux aussi utiliser des clauses between.
La liste de 1778 valeurs, c'est assez indigeste
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 17h29   #5
Rédacteur
 
Inscription : décembre 2002
Messages : 2 401
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 401
Points : 3 307
Points : 3 307
Citation:
Envoyé par plaineR Voir le message
ou mieux (prise en compte de l'index) :
Code :
SELECT ident_t FROM personne WHERE ident_p IN ('1234', '1235', ...
Je ne vois pas comment on peut dire ça dans l'absolu, sans même préciser de quelle version on parle.
Une petite démo ?
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 17h57   #6
Membre émérite
 
Inscription : août 2008
Messages : 835
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 835
Points : 823
Points : 823
Citation:
Envoyé par f3nr1 Voir le message
Je travaille sur une base de données oracle 10.g
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2008, 10h18   #7
Invité de passage
 
Inscription : septembre 2008
Messages : 2
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2008
Messages : 2
Points : 0
Points : 0
J'ai précisé la version d'Oracle dès le début de mon message (10.g)

J'avais pensé à un between mais dans mon cas ce n'est pas applicable car c'est 1778 champs parmi 40000 environ.

Je vais le tenter de passer par le IN car ce sera surement plus facile que passer par les OR.

Merci pour vos réponses.
f3nr1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2008, 10h34   #8
Rédacteur
 
Inscription : décembre 2002
Messages : 2 401
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 401
Points : 3 307
Points : 3 307
Citation:
Envoyé par f3nr1 Voir le message
J'ai précisé la version d'Oracle dès le début de mon message (10.g)
Ma remarque sur la version s'appliquait à la réponse de Plainer.

Je ne vois pas comment on peut dire en toute généralité qu'un IN utilise les index contrairement au OR.
En 10g, un test basique montre que le OR prend en compte les index aussi.

Comme Plainer n'a pas l'habitude de dire des énormités, je suppose qu'il avait une subtilité particulière en tête (une certaine version, etc).
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h43.


 
 
 
 
Partenaires

Hébergement Web