歇字符串/阵列成较小的字符串/阵列

歇字符串/阵列成较小的字符串/阵列

问题描述:

在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

我认为首先进入Array然后从Array构造语句会更昂贵,是吗? – bjan

首先,找准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个字符)。取下string中插入snipplet(不要忘记重复循环之前,除去从string中领先的逗号)

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