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