Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So wählen Sie eine Liste mit 10.000 eindeutigen IDs aus Dual in Oracle SQL aus

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