Use uma coleção (eles não estão limitados a 1.000 itens como um
IN
cláusula é):SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
e SYS.ODCINUMBERLIST
são tipos de coleção fornecidos no SYS
esquema. Você pode juntar isso diretamente a qualquer tabela em que estiver
SELECT
sem precisar usar o DUAL
tabela:SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Se você conseguir criar um tipo de coleção, nem precisará da
TABLE
expressão e pode usá-lo diretamente no WHERE
cláusula usando o MEMBER OF
operador:CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Você pode até passar os valores como um parâmetro de ligação - veja minha resposta aqui