Verwenden Sie eine Sammlung (sie sind nicht auf 1000 Elemente beschränkt, wie ein IN Klausel ist):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
SYS.ODCIVARCHAR2LIST und SYS.ODCINUMBERLIST sind Sammlungstypen, die in SYS bereitgestellt werden Schema.
Sie können dies direkt mit dem Tisch verbinden, an dem Sie SELECT sind ohne den DUAL verwenden zu müssen Tabelle:
SELECT y.*
FROM your_table y,
TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
WHERE y.id = i.COLUMN_VALUE;
Wenn Sie einen Sammlungstyp erstellen lassen können, benötigen Sie nicht einmal die TABLE Ausdruck und kann ihn direkt im WHERE verwenden -Klausel mit dem MEMBER OF Betreiber:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Sie können die Werte sogar als Bindungsparameter übergeben - siehe meine Antwort hier