Použijte sbírku (nejsou omezeny na 1000 položek jako IN
doložka je):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
a SYS.ODCINUMBERLIST
jsou typy kolekcí, které jsou dodávány v SYS
schéma.
Můžete se připojit přímo ke kterékoli tabulce SELECT
z bez nutnosti použití DUAL
tabulka:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Pokud můžete vytvořit typ kolekce, nepotřebujete ani TABLE
výraz a lze jej použít přímo v WHERE
klauzule pomocí MEMBER OF
operátor:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Hodnoty můžete dokonce předat jako parametr vazby - viz moje odpověď zde