Oracle
 sql >> Base de données >  >> RDS >> Oracle

comment sélectionner une liste de 10 000 identifiants uniques à partir de dual dans oracle SQL

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