Utilisez une collection (ils ne sont pas limités à 1000 éléments comme un IN
la clause est :
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
et SYS.ODCINUMBERLIST
sont des types de collection qui sont fournis dans le SYS
schéma.
Vous pouvez joindre ceci directement à n'importe quelle table que vous êtes SELECT
sans avoir besoin d'utiliser le DUAL
tableau :
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Si vous pouvez créer un type de collection, vous n'avez même pas besoin de la TABLE
expression et peut l'utiliser directement dans le WHERE
clause utilisant le MEMBER OF
opérateur :
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Vous pouvez même passer les valeurs en tant que paramètre de liaison - voir ma réponse ici