ORA-00907:创建varray时缺少右括号

use*_*712 3 oracle

在我的程序中,有很多情况需要获取有关知道ID的其他信息.所以我有id列表,其长度可能很长(例如100000个元素).

如何在不使用临时表的情况下使用此列表并在oracle中传输以获取sql?

不,我尝试使用集合:

CREATE TYPE TEST_VARRAY IS VARRAY(5000) OF NUMBER(18);

SELECT G.ID, G.NAME FROM ANY_TABLE G
WHERE G.ID IN
(
SELECT COLUMN_VALUE FROM TABLE(
NEW TEST_VARRAY
(0,1,2,3... and so on ...,995,996,997,998,999)
)
);
Run Code Online (Sandbox Code Playgroud)

有1000个号码.当我尝试执行此查询时,ORA-00907: missing right parenthesis会出现错误提示!但如果我先删除0(所以我们有999个数字)sql执行正常.

这有什么问题?

Sri*_*niV 5

Oracle IN子句中有一个限制.

逗号分隔的表达式列表可以包含不超过1000个表达式.逗号分隔的表达式列表可以包含任意数量的集合,但每个集合可以包含不超过1000个表达式.

在这里这里这里阅读

  • @ user1881712该限制也适用于对象构造函数的参数数量 - 在本例中为VARRAY构造函数.您无法在构造函数中创建具有超过1000个元素的varray. (2认同)