Bonjour,
dans une vue parametrée, j'aimerais mettre une condition optionnel(dans le WHERE). des fois je devrai prendre tous les enregistrement, et des fois pas. Comment puis-je faire?
est-ce clair ? si non, pardon..
Merci d'avance
Bonjour,
dans une vue parametrée, j'aimerais mettre une condition optionnel(dans le WHERE). des fois je devrai prendre tous les enregistrement, et des fois pas. Comment puis-je faire?
est-ce clair ? si non, pardon..
Merci d'avance
Merci de relire les règles du forum et par conséquent d'indiquer notamment votre SGBD et sa version.
Ensuite, soyez plus précis, donnez le code (simplifié ?) de votre vu ainsi qu'un jeu d'essais nous permettant de comprendre sans ambiguïté ce que vous souhaitez faire.
Enfin, si votre condition est relativement simple, avez-vous essayé d'utiliser la structure CASE WHEN (ou DECODE si vous êtes sur Oracle) ?
Excusez moi.
Je suis sous oracle 9i. Voici un exemple(très simplifier) de ce que je voudrais faire avec la solution la plus correct que j'ai trouvé :
dans ce code, ca me prend tous les enregistrement si je ne spécifie rien dans le champ par1 de ma table Param et sinon que l'enregistrement qui a l'id2 qui est égal au champ par1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select MaTable.ID from MaTable where Matable.id2 = nvl((select Param.par1 from Param),MaTable.id2)
Je suppose que param n'a qu'une ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT MaTable.ID FROM MaTable,Param WHERE Param.par1 is not null
oui, il n'a qu'une ligne.. par la suite lorsqu'il y aura plusieur utilisateur, je vais l'identifier grace a l'id de la session (userenv('sessionid'))..
Mon code fonctione, il fait ce que je veux, mais je pense pas que question performance ca soit le meilleur.. ma requete gère 60'000 enregistrement..
Une paille... pour un serveur optimisé !Mon code fonctione, il fait ce que je veux, mais je pense pas que question performance ca soit le meilleur.. ma requete gère 60'000 enregistrement..
S'il devait y avoir plusieurs paramètres, la requête pourrait être écrite comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT MaTable.* FROM MaTable WHERE EXISTS ( SELECT 1 FROM Param WHERE Param.SessionId = USERENV('sessionid') AND Matable.val1 = NVL(Param.par1, MaTable.val1) AND Matable.val2 = NVL(Param.par2, MaTable.val2) ) ;
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous,
N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton
et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
Ok mais où être vous bloqué si vous avez déjà réussi à écrire votre requête, qu'elle est syntaxiquement correcte et qu'elle vous donne le résultat attendu ?Envoyé par ehmppowa
Partager