Используйте коллекцию (они не ограничены до 1000 элементов, например, предложение IN
):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
и SYS.ODCINUMBERLIST
- это типы коллекций, которые включены в схему SYS
.
Вы можете присоединиться к этой таблице напрямую, SELECT
из какой таблицы вы 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'
);
Вы даже можете передать значения в качестве параметра привязки - см. мой ответ здесь
person
MT0
schedule
15.12.2016
BETWEEN
? - person cha   schedule 15.12.2016IN (SELECT C1 FROM (SELECT 'id123' C1 FROM DUAL UNION ALL SELECT 'id8923' FROM DUAL UNION ALL SELECT 'id32983' FROM DUAL))
- person Nick.McDermaid   schedule 15.12.2016