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