Gebruik een verzameling (ze zijn niet beperkt tot 1000 items zoals een IN
clausule is):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
en SYS.ODCINUMBERLIST
zijn verzamelingstypen die worden geleverd in de SYS
schema.
Je kunt hier direct aan deelnemen aan welke tafel je ook bent SELECT
zonder de DUAL
. te hoeven gebruiken tafel:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Als je een verzamelingstype kunt maken, heb je de TABLE
niet eens nodig expressie en kan deze direct gebruiken in de WHERE
clausule met behulp van de 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'
);
Je kunt de waarden zelfs doorgeven als een bindparameter - zie mijn antwoord hier