sql >> Database >  >> RDS >> Oracle

hoe een lijst met 10.000 unieke id's van dual te selecteren in Oracle SQL?

Gebruik een verzameling (ze zijn niet beperkt tot 1000 items zoals een IN clausule is):

SELECT COLUMN_VALUE AS id
FROM   TABLE(
         SYS.ODCIVARCHAR2LIST(
           'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
         )
       )

SYS.ODCIVARCHAR2LIST en SYS.ODCINUMBERLIST zijn verzamelingstypen die worden geleverd in de SYS schema.

Je kunt hier direct aan deelnemen aan welke tafel je ook bent SELECT zonder de DUAL . te hoeven gebruiken tafel:

SELECT y.*
FROM   your_table y,
       TABLE(
         SYS.ODCIVARCHAR2LIST(
           'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
         )
       ) i
WHERE  y.id = i.COLUMN_VALUE;

Als je een verzamelingstype kunt maken, heb je de TABLE niet eens nodig expressie en kan deze direct gebruiken in de WHERE clausule met behulp van de MEMBER OF operator:

CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/

SELECT *
FROM   yourtable
WHERE  id MEMBER OF stringlist(
                      'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
                    );

Je kunt de waarden zelfs doorgeven als een bindparameter - zie mijn antwoord hier



  1. SQL MET clausule voor beginners

  2. Databaseontwerp voor meertalige toepassingen

  3. LISTAGG in Oracle om verschillende waarden te retourneren

  4. Oracle 12.2 Sharding