【数据库异常】ORA-01795: 列表中的最大表达式数为 1000 错误代码解决

原因:这个问题出现的原因很明显,在SQL语句中in查询时超过了1000条。

解决:解决方式有两个:

1.通过截断in查询的数据,通过多个in+or的方式查询;
       

    StringBuilder sb = new StringBuilder();
//逗号分隔的string数据转List
                List<string> sellerAccountList = sellerAccounts.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                int inNum = 1; //已拼装IN条件数量

                for (int i = 0; i < sellerAccountList.Count; i++)
                {
                    if (string.IsNullOrEmpty(sellerAccountList[i])) continue;

                    //这里不要犯低级错误而写成:if(i == lists.length)
                    if (i == (sellerAccountList.Count - 1))
                        sb.Append(sellerAccountList[i]);    //SQL拼装,最后一条不加“,”。
                    else if (inNum == 1000 && i > 0)
                    {
                        sb.Append(sellerAccountList[i] + ") OR SELLER_ACCOUNT IN ( ");    //解决ORA-01795问题
                        inNum = 1;
                    }
                    else
                    {
                        sb.Append(sellerAccountList[i] + ", ");
                        inNum++;
                    }
                };

2.通过与临时表建立join或exists查询(同库操作)

在Oracle新建事务结束后自动清除数据的TEMP表,在程序操作时往表中写入要in查询的数据,再通过与临时表建立join或exists查询.

注意:数据量很大时希望考虑其他查询方式,in的数值太多不管用这两种方式中的哪一个都很慢,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值