118 votes

Comment mettre plus de 1000 valeurs dans une clause Oracle IN

Est-il possible de contourner la limitation Oracle 10g de 1 000 éléments dans une clause statique IN? J'ai une liste délimitée par des virgules de nombreux ID que je souhaite utiliser dans une clause IN. Cette liste peut parfois contenir plus de 1 000 éléments. Oracle renvoie alors une erreur. La requête est similaire à celle-ci ...

 select * from table1 where ID in (1,2,3,4,...,1001,1002,...)
 

106voto

Otávio Décio Points 44200

Placez les valeurs dans une table temporaire puis effectuez un select où id dans (select id de tentant)

80voto

Sergey11g Points 23
select ... where (
    'bla', colX ) in (
        ('bla', 1),
        ('bla', 2),
        ('bla', 3),
        ('bla', 4),
        ('bla', 5),
    ) ...

68voto

Peter Severin Points 1502

Je suis presque sûr que vous pouvez fractionner les valeurs sur plusieurs RI en utilisant OU:

 select * from table1 where ID in (1,2,3,4,...,1000) or 
ID in (1001,1002,...,2000)
 

53voto

rics Points 2742

Vous pouvez essayer d'utiliser le formulaire suivant:

 select * from table1 where ID in (1,2,3,4,...,1000)
union all
select * from table1 where ID in (1001,1002,...)
 

8voto

WW. Points 11335

Où voulez-vous obtenir la liste des identifiants de la première place? Puisqu'ils sont des Identifiants de votre base de données, ont-ils provenir d'une requête précédente?

Quand j'ai vu cela dans le passé, il a été parce que:-

  1. une table de référence est manquante et de la bonne façon serait d'ajouter la nouvelle table, mettre un attribut sur la table et se joindre à elle
  2. une liste d'id est extraite de la base de données, et ensuite utilisé dans une autre instruction SQL (peut-être plus tard ou sur un autre serveur ou quoi que ce soit). Dans ce cas, la réponse est de ne jamais extraire à partir de la base de données. Stocker dans une table temporaire ou tout simplement écrire une requête.

Je pense qu'il peut y avoir de meilleures façons de retravailler ce code qui vient de recevoir cette instruction SQL pour travailler. Si vous donner plus de détails, vous pouvez obtenir quelques idées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X