【问题标题】:workaround ORA-01795 error programmatically以编程方式解决 ORA-01795 错误
【发布时间】:2014-02-14 03:53:37
【问题描述】:

我收到 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.

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

【问题讨论】:

  • 网上已经有很多解决方案。做一些搜索。

标签: c# asp.net oracle


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2013-07-24
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多