Använd en samling (de är inte begränsade till 1000 objekt som en IN
klausulen är):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
och SYS.ODCINUMBERLIST
är samlingstyper som tillhandahålls i SYS
schema.
Du kan ansluta detta direkt till vilken tabell du än är SELECT
ing från utan att behöva använda DUAL
tabell:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Om du kan skapa en samlingstyp behöver du inte ens TABLE
uttryck och kan använda det direkt i WHERE
sats med MEMBER OF
operatör:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Du kan till och med skicka värdena som en bindningsparameter - se mitt svar här