0

我生成这样的查询:

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) - 方法分区 List 条件如下: (propertyName IN (...) OR propertyName IN (...) OR propertyName IN (...) ) 如果 List 包含更多 1000 个元素

当我执行此查询时,出现错误:ORA-00913: too many values.

但是如果我设置rateValue = 10000并生成查询,它执行正常。这里有什么问题?

我附上了查询http://dfiles.ru/files/z1yq9iazj(我不能在这里写,因为有错误:“589752 个字符太长”))。最有趣的是,如果从第一个 IN 中删除“0”,它将执行正常。

附言。甲骨文版本 10

4

2 回答 2

-1

是否只有一个属性名称?为什么不在一个 IN 条件中添加和排序,即 propertyName IN ('a', 'b', 'c'...)

在此处通读 00913 消息的描述。http://www.techonthenet.com/oracle/errors/ora00913.php

于 2013-09-22T16:17:22.473 回答
-1

我猜您已经超出了 Oracle 对子IN句中可以包含的条目数的限制。您需要减少条目数 - 正如您通过将列表设置为 10,000 个条目发现的那样。

但是,由于您的列表从 0 开始,并且由连续的数字组成,为什么不使用

SELECT ... WHERE G.ID <= 100000 
于 2013-09-22T16:20:25.367 回答