Brug en samling (de er ikke begrænset til 1000 genstande som en IN
). klausulen er):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST
og SYS.ODCINUMBERLIST
er samlingstyper, der er leveret i SYS
skema.
Du kan tilslutte dette direkte til hvilken tabel du er SELECT
ing fra uden at skulle bruge DUAL
tabel:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Hvis du kan få oprettet en samlingstype, behøver du ikke engang TABLE
udtryk og kan bruge det direkte i WHERE
klausul ved hjælp af 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 endda sende værdierne som en bind-parameter - se mit svar her