ORA-01795: 列表中表达式的最大数目为 1000 错误

ORA-01795: maximum number of expressions in a list is 1000 error

我需要添加一个具有大约 17000 个值的参数。他们不断变化。 我希望 "all" 成为默认值,但在那种情况下,由于 IN 列表被数据库限制为 1,000 个条目,因此我无法将所有 17,000 个值传递给参数。

当我尝试传递所有 17,000 个值时,出现 "ORA-01795: maximum number of expressions in a list is 1000" 错误。

我理解为什么 Oracle 不允许更多。有没有办法克服这个问题?

不要在需要时全部传递 17,000 个值。改为这样做。

select * 
from abc 
where (segment = :segment OR :segment IS NULL)

当用户没有 select 段参数值时,这将为所有段 return 数据。

如果您希望您的前端将 "all" 显示为一个值,您可以将其作为一个简单的变体:

select * 
from abc 
where (segment = :segment OR nullif(:segment,'all') IS NULL)