Oracle
 sql >> Database >  >> RDS >> Oracle

come selezionare un elenco di 10.000 ID univoci da dual in Oracle SQL

Usa una collezione (non sono limitati a 1000 articoli come un IN la clausola è):

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

SYS.ODCIVARCHAR2LIST e SYS.ODCINUMBERLIST sono tipi di raccolta forniti in SYS schema.

Puoi unirti direttamente a qualsiasi tavolo tu sia SELECT da senza dover utilizzare il DUAL tabella:

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

Se riesci a creare un tipo di raccolta, non hai nemmeno bisogno della TABLE espressione e può usarlo direttamente in WHERE clausola utilizzando il MEMBER OF operatore:

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

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

Puoi anche passare i valori come parametro di associazione:vedi la mia risposta qui