|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Bonjour, voici mon problème:
Je recoit en entrée une liste d'id sous la forme "id1,id2,id3,id3". J'ai une fonction getObjectsByIds(idList) qui appelle un dataset ODP.NET Je dois ne retourner que les objets ayant un id inclut dans la liste du dessus. Actuellement j'ai mis en place la requête suivante qui a beaucoup de désavantages: - Performances médiocres - Pour un id '123' il matchera un id '1234' car inclut dans celui ci. Code :
Auriez vous des solutions plus élégantes? Merci |
||
|
|
00
|
|
|
#2 | ||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 925 ![]() |
quelques pistes...
|
||||||
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Merci pour la réponse!
Je vais creuser du coté des regexp, je n'y avais pas pensé merci. (EDIT: Je n'avais pas vu ta facon de générer le contenue du tube de IN a l'aide d'une sous requete) |
|
|
00
|
|
|
#4 | |||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
Citation:
Code :
SELECT * FROM TABLE1 WHERE REGEXP_LIKE(:idsList, '(\W|\A)'||TABLE1.ID||'(\W|\Z)') |
|||
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 925 ![]() |
le plus performant restant la soluce 1, car on peut employer l'index sur ID
Code :
SELECT 'YES' FROM dual WHERE id IN (SELECT value(t) FROM TABLE(:list)t) |
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 13 ![]() |
L'admin de la DB a considéré que les index ca servait à rien.... (aucun index existant)
Et que les clef primaire en chaine de char éclaté sur 3 champs c'etait super |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com