Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como selecionar uma lista de 10.000 ids exclusivos do dual no Oracle SQL


Use uma coleção (eles não estão limitados a 1.000 itens como um IN cláusula é):
SELECT COLUMN_VALUE AS id
FROM   TABLE(
         SYS.ODCIVARCHAR2LIST(
           'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
         )
       )

SYS.ODCIVARCHAR2LIST e SYS.ODCINUMBERLIST são tipos de coleção fornecidos no SYS esquema.

Você pode juntar isso diretamente a qualquer tabela em que estiver SELECT sem precisar usar o DUAL tabela:
SELECT y.*
FROM   your_table y,
       TABLE(
         SYS.ODCIVARCHAR2LIST(
           'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
         )
       ) i
WHERE  y.id = i.COLUMN_VALUE;

Se você conseguir criar um tipo de coleção, nem precisará da TABLE expressão e pode usá-lo diretamente no WHERE cláusula usando o 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'
                    );

Você pode até passar os valores como um parâmetro de ligação - veja minha resposta aqui