我得到一个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条件中添加,但是代码有问题。
答案 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,...)