Use una colección (no están limitadas a 1000 elementos como un IN
cláusula es):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
y SYS.ODCINUMBERLIST
son tipos de colección que se proporcionan en el SYS
esquema.
Puedes unirte a esto directamente a cualquier mesa en la que estés SELECT
ing desde sin necesidad de utilizar el DUAL
tabla:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Si puede crear un tipo de colección, entonces ni siquiera necesita la TABLE
expresión y puede usarla directamente en el WHERE
cláusula usando el 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'
);
Incluso puede pasar los valores como un parámetro de vinculación; consulte mi respuesta aquí