Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 28/05/2011, 12h51   #1
Futur Membre du Club
 
Inscription : février 2007
Messages : 48
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : février 2007
Messages : 48
Points : 15
Points : 15
Envoyer un message via Yahoo à jeedev Envoyer un message via Skype™ à jeedev
Par défaut Une procédure stockée pour rechercher des enregistrements

* Bonjour, *

Je voudrais créer une procédure stockée qui recherche des enregistrements dans une table (personne) avec les critères suivants :
- Nom, prénom et la date de naissance.

La question qui m'intrigue

Est ce qu'il y a un moyen pour écrire une seule procédure stockée qui fait toutes les combinaisons possible en cas ou l'utilisateur saisit juste le nom par exemple et laisse le prénom et la date de naissance à vide. ou il saisit le nom et la date de naissance et laisse le prénom à vide ainsi de suite.


Je vous remercie d'avance.
jeedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2011, 22h07   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Oui quelque chose du genre:

Code :
WHERE (nom=@nom OR @nom IS NULL) AND (prenom=@prenom OR @prenom IS NULL) OR (dateNaissance=@dateNaissance OR @dateNaissance IS NULL)

Avec @nom, @prenom, @dateNaissance vos trois paramètres de la SP...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 12h14   #3
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
+1 iberserk.

Aussi, regarde du côté des fonctions table (UDTF = User Define Table Function).
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 14h25   #4
Membre actif
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 183
Points : 183
Gaffe par rapport à la requête proposée, ça peut marcher, mais en terme de perfs, ça risque de craindre, DB2 étant incapable de choisir le bon index pour réaliser une telle requête, ne sachant jamais si la host variable sera ou non renseignée.

De plus, je pense que le besoin n'est pas de tester la colonne à la valeur NULL (en admettant que la colonne puisse prendre cette valeur), mais plutôt de ne pas la tester du tout, cad de ne faire une recherche qu'avec le nom par exemple. Pour autant, le prénom ne doit pas avoir la valeur NULL, il peut avoir n'importe quelle valeur.

Dans ce cas, la bonne solution serait, soit de faire du sql dynamique (tu écris la bonne requête en fonction des critères renseignés en entrée), soit de faire 7 requêtes différentes (ça peut le faire vu que tu n'as que 3 critères).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
WHERE NOM = :HV1 AND PRENOM = :HV2 AND DANAIS = :HV3
ou
WHERE NOM = :HV1 AND PRENOM = :HV2
ou
WHERE NOM = :HV1 AND DANAIS = :HV3
ou
WHERE NOM = :HV1
ou
WHERE PRENOM = :HV2 AND DANAIS = :HV3
ou
WHERE PRENOM = :HV2
ou
WHERE DANAIS = :HV3
Pour répondre à ces prédicats, il te faudra un index sur chaque colonne, sinon tu partiras en scan de la table dans certains cas.

Tiens nous au courant de ton besoin exact.
pdz74 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 20h16.


 
 
 
 
Partenaires

Hébergement Web