zoukankan      html  css  js  c++  java
  • oracle的SQL语句in中的限制

    最近做一个验证文件中的数据是否在数据库中存在的小验证,因为传到数据库中验证的只是两个字段而已,如:select t.id from table where to_char(t.import_date,'yyyy-MM-dd')=#importDate# and t.device_no in ($deviceNo$),importDate字段是固定的,deviceNo字段是变化的.而在oracle中,SQL的in的内容是有限制的,只能1000个传入值,而导入文件中,就可能有上万条记录,如果一条一条地验证,将有上万次与数据库的交互.所以想到了按照1000值来拆分和拼装SQL.

    Java代码 复制代码 收藏代码
    1. /**
    2. * 验证导入数据
    3. */
    4. @Override
    5. public String checkKJLIndexExcel(List<KJLIndexImportDateModel> list)
    6. throws Exception {
    7. int size=list.size();
    8. StringBuffer str=new StringBuffer();
    9. // oracle限定的sql in 最大表达式数为 1000
    10. // 否则将出现java.sql.SQLException: ORA-01795 的错误
    11. //用设备号和导入时间来验证是否有相同的数据,将设备号拆开来in进去,减少与数据库的交互
    12. if(size<1000){//值小于1000
    13. str=getBaseId(list);
    14. }else{
    15. int i2=0;
    16. for(int i=0;i<(size/1000)+1;i++){
    17. List list2 = null;
    18. try {
    19. list2 = list.subList(i2, i2 + 1000);
    20. //数组越界,说明i2+1000超过了list的size,到了list/1000的余数阶段
    21. } catch (IndexOutOfBoundsException e) {
    22. list2 = list.subList(i2, list.size());
    23. }
    24. i2 += 1000;
    25. String str2=getBaseId(list2);//拼装SQL,到数据库中验证
    26. if(StringUtil.isEmpty(str)){
    27. str.append(str2);
    28. }else{
    29. str.append(",").append(str2);
    30. }
    31. }
    32. }
    33. return str;
    34. }  
  • 相关阅读:
    Android MVP
    Intellij Idea/Webstorm/Phpstorm 的高效快捷键
    如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
    前端开发利器webStorm /phpStorm
    CSS清除浮动方法集合
    14 JS基本语句
    12.8.8 可见与隐藏
    12.8 定位属性
    12.5 段落属性
    12.4 背景属性
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3576035.html
Copyright © 2011-2022 走看看