ORA-00913使用大量“IN”语句时出错

时间:2013-09-22 16:09:39

标签: sql oracle

我生成这样的查询:

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

2 个答案:

答案 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