sql >> Base de Datos >  >> RDS >> Oracle

cómo seleccionar una lista de 10,000 identificaciones únicas de dual en Oracle SQL

Use una colección (no están limitadas a 1000 elementos como un IN cláusula es):

SELECT COLUMN_VALUE AS id
FROM   TABLE(
         SYS.ODCIVARCHAR2LIST(
           'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
         )
       )

SYS.ODCIVARCHAR2LIST y SYS.ODCINUMBERLIST son tipos de colección que se proporcionan en el SYS esquema.

Puedes unirte a esto directamente a cualquier mesa en la que estés SELECT ing desde sin necesidad de utilizar el DUAL tabla:

SELECT y.*
FROM   your_table y,
       TABLE(
         SYS.ODCIVARCHAR2LIST(
           'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
         )
       ) i
WHERE  y.id = i.COLUMN_VALUE;

Si puede crear un tipo de colección, entonces ni siquiera necesita la TABLE expresión y puede usarla directamente en el WHERE cláusula usando el MEMBER OF operador:

CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/

SELECT *
FROM   yourtable
WHERE  id MEMBER OF stringlist(
                      'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
                    );

Incluso puede pasar los valores como un parámetro de vinculación; consulte mi respuesta aquí