Użyj kolekcji (nie są one ograniczone do 1000 elementów, takich jak IN
klauzula to):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
i SYS.ODCINUMBERLIST
są typami kolekcji, które są dostarczane w SYS
schemat.
Możesz dołączyć to bezpośrednio do dowolnej tabeli SELECT
bez konieczności używania DUAL
tabela:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Jeśli możesz utworzyć typ kolekcji, nie potrzebujesz nawet TABLE
wyrażenie i może używać go bezpośrednio w WHERE
klauzula przy użyciu MEMBER OF
operator:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Możesz nawet przekazać wartości jako parametr wiązania - zobacz moją odpowiedź tutaj