解决方法ORA-01795以编程方式错误

时间:2014-02-13 19:03:52

标签: c# asp.net oracle

我得到一个ORA-01795:列表中表达式的最大数量是我希望在代码中解决的项目的1000错误。基本上我正在使用2个数据库(一个sql server,一个oracle),我只有只读访问权限(不能创建临时表)。

我所做的是从DB 1中选择ID列表,然后从DB2中搜索与这些ID相对应的信息。这是我使用'IN'子句的地方,它包含超过1000个ID。我想知道如何以编程方式解决这个问题 - 这是我到目前为止所做的(伪代码,我的实际代码复杂得多,包装太多):

1. "select ID from table 1 where some condition." [Database 1 conn]
2. string IDs = "";
   while (rset.next)
   {
        IDs += rset.getcolumn("ID");
        IDs += ", ";
   }
   ID.Remove(ID.length - 2); //at this point I have all IDs separated by a comma.
3. "select * from table 2 where ID IN (" +IDs+ ")" //this is where the error occurs.

这有解决方法吗?我的想法之一是将ID字符串拆分为一个字符串数组,每个单元格中有999个ID,然后在sql查询字符串中有一个for循环,以便在OR条件中添加,但是代码有问题。

1 个答案:

答案 0 :(得分:1)

有两种非常标准的解决方案,如果您有权创建一个,然后在其中执行id(从temptable中选择id),则1是临时表。第二个类似于你的建议,做999,然后为下一个999添加一个联合,依此类推。

 select * from t1 where Id in (1,2 ... ,1000)
 union all
 select * from t2 where Id in (1001,1002,...)