Използвайте колекция (те не са ограничени до 1000 елемента като IN
). клауза е):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
и SYS.ODCINUMBERLIST
са типове колекции, които се предоставят в SYS
схема.
Можете да се присъедините директно към тази таблица, която сте SELECT
от, без да е необходимо да използвате DUAL
таблица:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Ако можете да създадете тип колекция, тогава дори не се нуждаете от TABLE
израз и може да го използва директно в WHERE
клауза, използваща MEMBER OF
оператор:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Можете дори да предадете стойностите като параметър за свързване - вижте моя отговор тук