bar*_*ker 2 sql oracle dual-table
所以我无法创建或编辑表(我是具有只读权限的用户)并且我想查找 10,000 个唯一 ID。我无法将它们放在 IN() 语句中,因为 oracle 限制超过 1000 个项目。
是否可以从 oracle 中的 DUAL 表中选择整个列表?就像是:
select
'id123,id8923,id32983,id032098,id308230,id32983289'
from DUAL
Run Code Online (Sandbox Code Playgroud)
使用集合(它们不像IN子句那样限制为 1000 个项目):
SELECT COLUMN_VALUE AS id
FROM TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
)
Run Code Online (Sandbox Code Playgroud)
SYS.ODCIVARCHAR2LIST和SYS.ODCINUMBERLIST是架构中提供的集合类型SYS。
您可以直接将其连接到您所在的任何表,SELECT而无需使用该DUAL表:
SELECT y.*
FROM your_table y
INNER JOIN TABLE(
SYS.ODCIVARCHAR2LIST(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
)
) i
ON (y.id = i.COLUMN_VALUE);
Run Code Online (Sandbox Code Playgroud)
如果您可以创建一个集合类型,那么您甚至不需要表达式TABLE,可以使用运算符直接在WHERE子句中使用它MEMBER OF:
CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(200);
/
Run Code Online (Sandbox Code Playgroud)
SELECT *
FROM yourtable
WHERE id MEMBER OF stringlist(
'id123', 'id8923', 'id32983', 'id032098', 'id308230', 'id32983289'
);
Run Code Online (Sandbox Code Playgroud)
您甚至可以将这些值作为绑定参数传递 - 请参阅此处我的答案