小编典典

如何在oracle SQL中从双重选择10,000个唯一ID的列表

sql

因此,我无法创建或编辑表(我是具有只读权限的用户),并且想查找10,000个唯一ID。我无法将它们放在IN()语句中,因为oracle限制了1000多个项目。

是否可以从oracle的DUAL表中选择整个列表?就像是:

select  
'id123,id8923,id32983,id032098,id308230,id32983289'  
from DUAL

阅读 174

收藏
2021-05-05

共1个答案

小编典典

使用集合(像IN条款一样,它们不限于1000个项目):

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

SYS.ODCIVARCHAR2LIST并且SYS.ODCINUMBERLIST是在所提供的集合类型SYS的架构。

您可以将其直接连接到要访问的任何表SELECT,而无需使用该DUAL表:

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

如果您可以创建一个集合类型,那么您甚至不需要该TABLE表达式,并且可以使用运算符在WHERE子句中直接使用它MEMBER OF

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

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