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