2013-01-04 467 views
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,...。 將此分解成更小的部分的更快方法是什麼?

+0

我認爲首先進入Array然後從Array構造語句會更昂貴,是嗎? – bjan

回答

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個字符)。取下string中插入snipplet(不要忘記重複循環之前,除去從string中領先的逗號)

然後你重複任務,直到你跑出來的字符串。不要忘記更改第二次等運行的限制,因爲它們不使用完整選擇,而是使用OR Student_ID IN,但邏輯保持不變。