如果出现这个错误说明你传的参量是超过了一千个值;列如,你拼接了1001个id;

如何解决那,我这里提供两种方法:

1.每1000条加一个or in

列:

原:select p.* from t_premium p where p.premium_id in ('0','1'........,'1000',......'2000');

现:select p.* from t_premium p where p.premium_id in ('0','1'......‘999’)or in (’1000',......'1999');

如何实现那?

看下边

     public static void main(String[] agrs) throws Exception {
StringBuffer thirdPartyPayId=new StringBuffer();
for (int j = 0; j < 20; j++) {
if((j%10) == 0 && j > 1){
thirdPartyPayId.deleteCharAt(thirdPartyPayId.length() -1);
thirdPartyPayId.append(") OR " + "info.third_party_pay_id" + " IN ('" + j + "',");
}else{
thirdPartyPayId.append("'").append(j).append("',");
}
}
thirdPartyPayId.deleteCharAt(thirdPartyPayId.length() -1);
System.out.println(thirdPartyPayId.toString());
}

我这里用j代替了循环的"info.third_party_pay_id" ,兄弟们用的时候可以遍历自己的list,获取参量;

thirdPartyPayId.deleteCharAt(thirdPartyPayId.length() -1):去掉多余的标点符号,不能省;

SELECT DISTINCT
               nvl(info.apply_policy_no,'无') applyPolicyNo
             FROM T_THIRD_PARTY_PAY_INFO info,t_department_define o
            WHERE info.department_code = o.internal_department_code(+)
            AND (info.third_party_pay_id IN ($thirdPartyPayId$ ))
            AND info.FLAG = '2'

注:1.这种方式效率很慢;数据量小的话也就无所谓;数据量大的话不建议使用;

  2.()这两个括号必须要,因为(+)这个不能和in, not in 一起使用,但是因为

2.传递的参量转换成一个sql查询

SELECT DISTINCT
               nvl(info.apply_policy_no,'无') applyPolicyNo
             FROM T_THIRD_PARTY_PAY_INFO info,t_department_define o
            WHERE info.department_code = o.internal_department_code(+)
            AND info.third_party_pay_id IN (

    SELECT
                          sd.third_party_pay_id
                     FROM T_SOURCE_DOCUMENT sd,t_voucher v
                    WHERE sd.VOUCHER_ID = v.VOUCHER_ID and v.voucher_code=#voucherCode#
                    AND sd.third_party_pay_id IS NOT NULL
                    and v.CANCEL_STATUS != '2'

       )
            AND info.FLAG = '2'

就是说你获取参量的那个查询sql放进来;

后记:应该还有join以及exists两种思路。但用起来感觉所锁定目标不太清晰。故没做考量;

SQL使用IN参量不能超过1000的表现形式以及解决办法的更多相关文章

  1. oracle select in超过1000条报错解决方法

    本博客介绍oracle select in超过1000条数据的解决方法,java框架是采用mybatis的,这可以说是一种比较常见的错误:select * from A where id in(... ...

  2. ASP.NET伪静态-无法读取配置文件,因为它超过了最大文件大小的解决办法

    一直都在使用微软URLRewriter,具体的使用方法我就不多说了,网上文章很多. 但最近遇到一个问题,就是当web.config文件里面设置伪静态规则过多,大于2M的时候,就报错:无法读取配置文件, ...

  3. SQL Server数据库实例名与服务器名不一致的解决办法

    SQL Server数据库实例名与服务器名不一致的解决办法 --EXEC sp_addlinkedserver --   @server = 'PSHGQ' --GO --select * from  ...

  4. SQL Server中TOP子句可能导致的问题以及解决办法

    简介      在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性.      关系数据库中SQL语句只 ...

  5. 关于sql server2008数据库的连接的几个问题及解决办法

    写在开头 不得不说给一台新的服务器配置和部署的确是个不小的工程,在这里先感谢我们的DEV焉域政同学在这方面做出的一些贡献:把安装过程极为困难的sql server2008成功安装到服务器上,并且为我们 ...

  6. discuz搬家后报错SQL:SELECT value FROM [Table]vars WHERE name=’noteexists1′的解决办法

    基本上每个站长都会经历网站搬家,网站搬家中有时候就会遇到这次提到的这个错误数据库报错::SQL:SELECT value FROM [Table]vars WHERE name=\\\'noteexi ...

  7. MS SQL SERVER 2008 R2 实例服务启动出现10048错误解决办法

    由于个人癖好,把MSSQLSERVER服务禁止了开机启动,每次需要的时候就输入CMD命令开启.今天在开启的时候,系统提示“发生服务特定错误:10048”. 于是打开SQL Server配置管理器,发现 ...

  8. SQL Server没有足够的内存继续执行程序 (mscorlib)的解决办法

    在Microsoft SQL Server Management Studio 中执行较大的sql脚本时,会报没有足够的内存继续执行程序(mscorlib)的错误.如下图所示 解决方法: 使用sqlc ...

  9. ORA-01843: 无效的月份,执行sql语句更改为美国语言后仍然失败的解决办法

    ORA-01843: 无效的月份失败的 sql 为:XXXXXXXXXXXXXXXX 执行sql语句更改为美国语言后仍然失败, ALTER SESSION SET NLS_DATE_LANGUAGE= ...

随机推荐

  1. 【转载】Java下利用Jackson进行JSON解析和序列化

    参考资料: https://blog.csdn.net/sdut406/article/details/85647982 Java下常见的Json类库有Gson.JSON-lib和Jackson等,J ...

  2. react 导航切换

    <ul class="nav"> <li onClick={() => this.changeFontColor(0)} className={`${0 = ...

  3. eBPF监控工具bcc系列五工具funccount

    eBPF监控工具bcc系列五工具funccount funccount函数可以通过匹配来跟踪函数,tracepoints 或USDT探针.例如所有以vfs_ 开头的内核函数. ./funccount ...

  4. 2019西安多校联训 Day3

    试题链接:http://www.accoders.com/contest.php?cid=1895    考试密码请私信; 特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面) T1 显然二分求解的 ...

  5. 深入分析同步工具类之AbstractQueuedSynchronizer

      概览: AQS(简称)依赖内部维护的一个FIFO(先进先出)队列,可以很好的实现阻塞.同步:volatile修饰的属性state,哪个线程先改变这个状态值,那么这个线程就获得了优先权,可以做任何事 ...

  6. 制作一个最小Linux系统

    使用的是itop4412开发板(仅记录个人的学习回顾,如有不当之处欢迎指出) ---------致谢 准备:busybox软件.uboot(一般和开发板配套).zImage(kernel内核).ram ...

  7. LINUX-网络 - (以太网和WIFI无线)

    ifconfig eth0 显示一个以太网卡的配置 ifup eth0 启用一个 'eth0' 网络设备 ifdown eth0 禁用一个 'eth0' 网络设备 ifconfig eth0 192. ...

  8. ds020507

    芯片输出端不加负载的时候,芯片的输出电压是9点多伏. 加上大的负载,芯片发热,电压接近输入电压. 正常负载,芯片输出7.0几伏. 版权声明:本文为博主原创文章,未经博主允许不得转载.

  9. 【Codeforces 1034A】Enlarge GCD

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 设原来n个数字的gcd为g 减少某些数字之后 新的gcd肯定是g的倍数 即gx 我们可以枚举这个x值(x>=2) 看看原来的数字里面有多 ...

  10. Java Web学习总结(31)——全站HTTPS化SSL免费证书使用

    1 背景 谷歌从 2017 年起,Chrome 浏览器将也会把采用 HTTP 协议的网站标记为「不安全」网站:苹果从 2017 年 iOS App 将强制使用 HTTPS:在国内热火朝天的小程序也要求 ...