歇字符串/阵列成较小的字符串/阵列
问题描述:
在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,...
。 将此分解成更小的部分的更快方法是什么?
答
首先,找准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
,但逻辑保持不变。
我认为首先进入Array然后从Array构造语句会更昂贵,是吗? – bjan