0

在 Oracle 中,该IN子句不包含超过 1000 个条目,例如

Select Name From Student Where Student_ID IN (1,2,3,4,5,...1000,1001,1002,1003,...)

是不可接受的,它被分解为

Select Name From Student Where Student_ID IN (1,2,3,4,5,...1000) OR 
Student_ID IN (1001,1002,1003,...)

现在,我将这些 ID 作为逗号分隔的字符串,即1,2,3,4,5,...1000,1001,1002,1003,.... 将其分解成更小的部分的更快方法是什么?

4

1 回答 1

0

SELECT首先,确定内部没有任何数据的语句的长度IN(我们将这些逗号分隔的数字称为 IN 字符串)

Len ("Select Name From Student Where Student_ID IN ()")

现在,你的极限是1000- Len ("Select...")

然后,InStrRev("1,2,3,4,5...",",",limit)从要插入的 IN 字符串中获取逗号分隔的数字的片段,Select并且它仍将低于 1000 个字符)。从 IN 字符串中删除插入的片段(不要忘记在重复循环之前从 IN 字符串中删除任何前导逗号)

然后你重复这个任务,直到你用完 IN 字符串。不要忘记更改第二次等运行的限制,因为它们不使用完全选择,而是使用OR Student_ID IN,但逻辑保持不变。

于 2013-01-04T17:22:16.220 回答