在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,...
。
什么是将其分解成更小部分的更快方法?
答案 0 :(得分:0)
首先,确定SELECT
语句的长度,IN
内没有任何数据(让我们将这些逗号分隔的数字称为IN字符串)
Len ("Select Name From Student Where Student_ID IN ()")
现在,您的上限为1000- Len ("Select...")
然后,执行InStrRev("1,2,3,4,5...",",",limit)
以获取您将插入Select
的IN字符串中的逗号分隔数字的snipplet,它仍将低于1000个字符)。从IN字符串中删除插入的snipplet(不要忘记在重复循环之前从IN字符串中删除任何前导逗号)
然后重复任务,直到用完IN字符串。不要忘记更改第二次运行的限制,因为它们不使用完整选择,而是使用OR Student_ID IN
,但逻辑保持不变。