因此,我无法创建或编辑表(我是具有只读权限的用户),并且想查找10,000个唯一ID。我无法将它们放在IN()语句中,因为oracle限制了1000多个项目。
是否可以从oracle的DUAL表中选择整个列表?就像是:
select 'id123,id8923,id32983,id032098,id308230,id32983289' from DUAL
使用集合(像IN条款一样,它们不限于1000个项目):
IN
SELECT COLUMN_VALUE AS id FROM TABLE( SYS.ODCIVARCHAR2LIST( 'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289' ) )
SYS.ODCIVARCHAR2LIST并且SYS.ODCINUMBERLIST是在所提供的集合类型SYS的架构。
SYS.ODCIVARCHAR2LIST
SYS.ODCINUMBERLIST
SYS
您可以将其直接连接到要访问的任何表SELECT,而无需使用该DUAL表:
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:
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' );