我生成这样的查询:
Dim goods As List = New List()
Dim rateValue as Integer = 100000
For i As Integer = 0 To rate
goods.Add(i)
Next
Dim Sql As System.Text.StringBuilder = New System.Text.StringBuilder()
Sql.AppendLine("SELECT G.ID, G.NAME")
Sql.AppendLine("FROM GOODS G")
Sql.AppendFormat("WHERE {0}", GetSqlListPartition(goods,"G.ID"))
string GetSqlIDListPartition(List list,string propertyName) - 方法分区列表条件如:(propertyName IN(...)OR propertyName IN(...)OR propertyName IN(...))in List包含更多1000个元素
执行此查询时,出现错误:ORA-00913: too many values
。
但如果我设置rateValue = 10000
并生成查询,则执行正常。这有什么问题?
我附上了查询http://dfiles.ru/files/z1yq9iazj(我不能在这里写,因为有错误:“太长了589752个字符”))。 最有趣的是,如果从第一个IN中删除“0”,它将执行正常。
PS。 oracle版本10
答案 0 :(得分:-1)
是否只有一个propertyName?为什么不在一个IN条件下添加和排序,即propertyName IN('a','b','c'...)
在此处阅读00913消息的说明。 http://www.techonthenet.com/oracle/errors/ora00913.php
答案 1 :(得分:-1)
我猜您已经超出了Oracle对IN
子句中可以包含的条目数量的限制。您需要减少条目数 - 正如您通过将列表设置为10,000个条目所发现的那样。
但是,由于您的列表从0开始,并且由连续数字组成,为什么不使用
SELECT ... WHERE G.ID <= 100000